#include<stdio.h>
int i,j,a[60010],n,m,x,p,q,poz,val,rez;
inline int actual(int st,int dr,int i)
{
if(st == dr) { a[i]=val;
return 0;
}
int mij = ( st + dr ) / 2;
if(poz <= mij) actual( st , mij , i*2) ;
else actual ( mij+1 , dr , i*2+1 );
a[i]=(a[i*2]+a[i*2+1]);
return 0;
}
inline int update(int st,int dr,int i)
{
if(st == dr) { a[i]-=val;
return 0;
}
int mij = ( st + dr ) / 2;
if(poz <= mij) update( st , mij , i*2);
else update ( mij+1 , dr , i*2+1);
a[i]=(a[i*2]+a[i*2+1]);
return 0;
}
inline int Search(int st,int dr,int i)
{
if(p <= st && dr <= q) { rez+=a[i];
return 0;
}
int mij = ( st + dr )/2;
if(p <= mij) Search ( st , mij , i*2 );
if(q > mij) Search( mij+1 , dr ,i*2+1);
return 0;
}
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",&val);
if(val) { poz = i;
actual(1,n,1);
}
}
for(i=1;i<=m;i++) { scanf("%d %d %d",&x,&p,&q);
if(x) { rez=0;
Search(1,n,1);
printf("%d\n",rez);
}
else { val = q;
poz = p;
update(1,n,1);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}