#include<stdio.h>
#define nmax 15005
int v[3*nmax],val[nmax];
void build(int x, int y, int p)
{
if(x==y)
{
v[p]=val[x];
return;
}
int mij=(x+y)>>1;
build(x,mij,p<<1);
build(mij+1,y,(p<<1)+1);
v[p]=v[p<<1]+v[(p<<1)+1];
}
void update(int x, int y, int p, int a, int b)
{
if(x=y)
{
v[p]-=b;
return;
}
int mij=(x+y)>>1;
if(a<=mij) update(x,mij,p<<1,a,b);
if(mij+1<=a) update(mij+1,y,(p<<1)+1,a,b);
v[p]=v[p<<1]+v[(p<<1)+1];
}
int query(int x, int y, int p, int a, int b)
{
if(a<=x && y<=b)
return v[p];
int mij=(x+y)>>1,s=0;
if(a<=mij) s=query(x,mij,p<<1,a,b);
if(mij+1<=b) s+=query(mij+1,y,(p<<1)+1,a,b);
return s;
}
int main()
{
int n,m,f,a,b,i;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&val[i]);
build(1,n,1);
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&f,&a,&b);
if(f==0)
update(1,n,1,a,b);
else
printf("%d\n",query(1,n,1,a,b));
}
return 0;
}