#include<cstdio>
using namespace std;
int v[15000*4];
int max(int a,int b)
{
if(a<b)
return b;
return a;
}
void update(int val, int poz, int st, int dr, int poz2)
{
int mij;
if(st==dr)
{
v[poz2]-=val;
return;
}
mij=(st+dr)/2;
if(poz<=mij)
update(val,poz,st,mij,2*poz2);
else
update(val,poz,mij+1,dr,2*poz2+1);
v[poz2]=v[2*poz2]+v[2*poz2+1];
}
int ans;
void query(int nod, int left, int right, int a, int b)
{
if(a<=left&&right<=b)
{
ans=ans+v[nod];
return;
}
int mid=(left+right)/2;
if(a<=mid)
query(nod*2, left, mid, a, b);
if(mid<b)
query(nod*2+1, mid+1, right, a, b);
}
int vec[15001];
void build(int n)
{
int i;
for(i=n;i<=n*2-1;i++)
{
v[i]=vec[i-n+1];
}
int k=n/2;
while(k!=1)
{
for(i=k;i<=k*2-1;i++)
{
v[i]=v[i*2]+v[i*2+1];
}
k/=2;
if(k==1)
v[1]=v[2]+v[3];
}
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
int n,m,i,j,f=1,t,x,y;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&vec[i]);
for(i=1;i<=31;i++)
{
f*=2;
if(n<f)
{
n=f;
break;
}
}
build(n);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&t,&x,&y);
if(t==0)
{
update(y,x,1,n,1);
}
if(t==1)
{
ans=0;
query(1,1,n,x,y);
printf("%d\n",ans);
}
}
return 0;
}