#include<bits/stdc++.h>
using namespace std;
#define maxn 1050
int c[maxn];//树状数组
int s[maxn];
int n,m;
int lowbit(int x) {
return x&(-x);
}
void update(int x,int val) { //单点更新
for(int i = x; i <= n; i+= lowbit(i)) {
// cout<<i<<endl;
c[i] += val;
s[i] += val*(x-1);
}
}
void range_update(int l, int r, int val) { //区间更新
update(l, val);//把l之后所有的点都更新一遍
update(r + 1, -val);//因为r之后的点是不用更新的,但是多更新了,所以要每个点都-val;
}
int query(int x)//单点查询
{
int res = 0;
for(int i = x; i>=1; i-= lowbit(i)) {
res+=c[i];
}
return res;
}
int ask(int x) {
int res = 0;
for(int i = x; i>=1; i-= lowbit(i)) {
res+=x*c[i]-s[i];
}
return res;
}
int range_ask(int l,int r){ //区间查询
return ask(r)-ask(l-1);
}
int main() {
cin>>n>>m;
int x,l,r,k,a,last;
for(int i=1;i<=n;i++){
scanf("%d",&x);
update(i,x-last);
last=x;
}
for (int i=0;i<m;i++){
scanf("%d",&x);
if (x==2){
scanf("%d %d",&l,&r);//区间求和
// range_update(l,r,k);
int ans=range_ask(l,r);
cout<<ans<<endl;
}else if (x==1){
scanf("%d %d",&l,&k);
range_update(l,l,k);//单点修改
// int ans = query(l);
// cout<<ans<<endl;
}
}
return 0;
}