#include<stdio.h>
#define dim 15010
int a,b,n,m,A[dim],H[3*dim],op,i;
FILE*f=fopen("datorii.in","r");
FILE*g=fopen("datorii.out","w");
void read(){
int i,x;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(f,"%d",&x),A[i]=A[i-1]+x;
}
}
void arbore(int nod,int st,int dr){
if(st==dr){
H[nod]=A[st]-A[st-1];
return;
}
int mij=(st+dr)/2;
arbore(nod*2,st,mij);
arbore(nod*2+1,mij+1,dr);
H[nod]=A[dr]-A[st-1];
}
void update(int nod,int st,int dr){
int mij=(st+dr)/2;
if(st==dr){
H[nod]-=b;
return;
}
if(st<=a&&mij>=a)
update(nod*2,st,mij);
mij++;
if(mij<=a&&a<=dr)
update(nod*2+1,mij,dr);
H[nod]-=b;
}
int querry(int nod,int st,int dr){
if(st>=a&&dr<=b)
return H[nod];
int sum1=0,sum2=0;
int mij=(st+dr)/2;
if(a<=mij&&b>=st)
sum1=querry(nod*2,st,mij);
if(a<=dr&&b>=(mij+1))
sum2=querry(nod*2+1,mij+1,dr);
return sum1+sum2;
}
int main(){
read();
arbore(1,1,n);
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&op,&a,&b);
switch(op){
case 0:
update(1,1,n);
break;
default:
fprintf(g,"%d\n",querry(1,1,n));
break;
}
}
return 0;
}