#include<stdio.h>
int v[ 40000 ],i,j,k,l,m,n,a,b,ok;
void update(int nod,int p,int u,int poz,int val){
if(p == u)
{v[nod]+=val;return;}
int m = (p+u)>>1;
if(poz <= m)
update(2*nod,p,m,poz,val);
else
update(2*nod+1,m+1,u,poz,val);
v[nod] = v[2*nod] + v[2*nod + 1];
}
int querry(int nod,int p,int u,int a,int b){
if(a <= p && u <= b)return v[nod];
if(u < a)return 0;
if(b < p)return 0;
int m = (p+u)>>1;
int x = 0,y = 0;
if(p <= m )
x = querry(2*nod,p,m,a,b);
if(m < u)
y = querry(2*nod+1,m+1,u,a,b);
return x+y;
}
int main(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for(i = 1 ; i <= n ; i++)
{scanf("%d",&a);
update(1,1,n,i,a);
}
for(i = 1; i <= m ; i++)
{scanf("%d %d %d",&ok,&a,&b);
if(ok == 1)
printf("%d\n",querry(1,1,n,a,b));
else
update(1,1,n,a,b*(-1));
}
return 0;}