#include <cstdio>
struct node{
node* l,*r;
int d;
};
node* root;
int n;
void remove(int i,int val){
node*tmp=root;
int l=0,r=n;
while(tmp){
tmp->d-=val;
if(i>(l+r)/2){
tmp=tmp->r;
l=(l+r)/2+1;
}
else{
tmp=tmp->l;
r=(l+r)/2;
}
}
}
int get(node* tmp,int l,int r,int lr,int rr){
if(l==lr&&r==rr)
return tmp->d;
int m=((lr+rr)/2);
if(r<=m)
return get(tmp->l,l,r,lr,m);
if(l>m)
return get(tmp->r,l,r,m+1,rr);
return get(tmp->l,l,m,lr,m)+get(tmp->r,m+1,r,m+1,rr);
}
node* init(int l,int r){
node* tmp=new node;
if(l==r)
scanf("%d",&(tmp->d));
else{
tmp->l=init(l,(l+r)/2);
tmp->r=init((l+r)/2+1,r);
tmp->d=tmp->l->d+tmp->r->d;
}
return tmp;
}
int main(){
int m;
int a,b,c;
freopen("datorii.in","rt",stdin);
freopen("datorii.out","wt",stdout);
scanf("%d%d",&n,&m);
root=init(0,n-1);
while(m--){
scanf("%d%d%d",&c,&a,&b);
if(c==1)
printf("%d\n",get(root,a-1,b-1,0,n-1));
else
remove(a-1,b);
}
return 0;
}