#include <stdio.h>
#define N 1<<14
#define M 1<<15
int n,m,v[N],poz[N],arb[M];
void cstr(int,int,int);
void update(int,int);
void read()
{
scanf("%d%d",&n,&m);
cstr(1,1,n);
int i;
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
update(i,v[i]);
}
}
void cstr(int nod,int x,int y)
{
if (x==y)
{
poz[x]=nod;
return;
}
int mij=(x+y)/2;
cstr(2*nod,x,mij);
cstr(2*nod+1,mij+1,y);
}
void update(int x,int y)
{
int start=poz[x],k;
//arb[start]+=y;
for (k=start; k>0; k/=2)
arb[k]+=y;
}
int query(int nod,int st,int dr,int poz1,int poz2)
{
if (st>=poz1 && dr<=poz2)
return arb[nod];
if (st>poz2 || dr<poz1)
return 0;
int mij=(st+dr)/2;
return query(2*nod,st,mij,poz1,poz2)+query(2*nod+1,mij+1,dr,poz1,poz2);
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
read();
int i,x,y,tip;
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&tip,&x,&y);
if (!tip)
update(x,-y);
else
printf("%d\n",query(1,1,n,x,y));
}
return 0;
}