#include<cstdio>
const int N=15000;
int tree[N*2+1];
int v[N+1];
int n,nrQ,poz,val,l,r;
bool qType;
void changeValTree(int l,int r,int pozTree){
int m=(l+r)/2;
tree[pozTree]+=val-v[poz];
if(l==r)
return;
if(poz<=m)
changeValTree(l,m,pozTree*2);
else
changeValTree(m+1,r,pozTree*2+1);
}
void changeV(){
changeValTree(1,n,1);
}
int getCase(int left,int right,int l,int r){
int m=(left+right)/2;
if(l==left&&r==right)
return 1;
if(l>m)
return 4;
if(r<=m)
return 3;
return 2;
}
int sumTree(int left,int right,int pozTree,int l,int r){
int m=(left+right)/2,treeCase=getCase(left,right,l,r);
if(treeCase==1)
return tree[pozTree];
else if(treeCase==2)
return sumTree(left,m,pozTree*2,l,m)+sumTree(m+1,right,pozTree*2+1,m+1,r);
else if(treeCase==3)
return sumTree(left,m,pozTree*2,l,m);
else
return sumTree(m+1,right,pozTree*2+1,m+1,r);
}
int sum(){
return sumTree(1,n,1,l,r);
}
void scan(){
int i;
scanf("%d%d",&n,&nrQ);
for(i=1;i<=n;i++){
scanf("%d",&val);
poz=i;
changeV();
v[i]=val;
}
}
void init(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scan();
}
void scanQ(){
int scan;
scanf("%d",&scan);
qType=scan==1;
if(qType)
scanf("%d%d",&l,&r);
else
scanf("%d%d",&poz,&val);
}
int main(){
init();
while(nrQ!=0){
scanQ();
val=v[poz]-val;
if(qType)
printf("%d\n",sum());
else
changeV();
nrQ--;
}
return 0;
}