#include<cstdio>
int v[15001];
int arb[60001];
void build(int nod,int st,int dr){
if(st==dr){
arb[nod]=v[st];
return;
}
int mid=(st+dr)/2;
build(2*nod,st,mid);
build(2*nod+1,mid+1,dr);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void update(int nod,int st,int dr,int poz,int val){
if(st==dr){
arb[nod]=val;
return;
}
int mid=(st+dr)/2;
if(poz<=mid)
update(2*nod,st,mid,poz,val);
else
update(2*nod+1,mid+1,dr,poz,val);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
int query(int nod,int st,int dr,int l,int r){
if(l<=st&&dr<=r)
return arb[nod];
int mid=(st+dr)/2;
if(r<=mid)
return query(2*nod,st,mid,l,r);
if(l>mid)
return query(2*nod+1,mid+1,dr,l,r);
return query(2*nod,st,mid,l,r)+query(2*nod+1,mid+1,dr,l,r);
}
int main(){
int n,m,i,o,a,b;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
build(1,1,n);
for(i=1;i<=m;i++){
scanf("%d%d%d",&o,&a,&b);
if(o==0){
v[a]-=b;
update(1,1,n,a,v[a]);
}else
printf("%d\n",query(1,1,n,a,b));
}
return 0;
}