/* Ivan Nicolae - Bucuresti */
/* Datorii - Arbori De Intervale */
#include <stdio.h>
#define NMAX 15001
#define _fin "datorii.in"
#define _fout "datorii.out"
struct node
{
int l, r, suma;
} AI[NMAX*2];
int i,n,m;
void Update_plus(int nod, int l, int r, int x, int y, int cat)
{
AI[nod].l=l; AI[nod].r=r;
if (x<=l && r<=y)
AI[nod].suma+=cat;
else {
int mij=(l+r)/2;
if (x<= mij) Update_plus(2*nod,l,mij,x,y,cat);
if (y> mij) Update_plus(2*nod+1,mij+1,r,x,y,cat);
AI[nod].suma=AI[2*nod].suma + AI[2*nod+1].suma;
}
}
void Update_minus(int nod, int l, int r, int x, int y, int cat)
{
AI[nod].l=l; AI[nod].r=r;
if (x<=l && r<=y)
AI[nod].suma-=cat;
else {
int mij=(l+r)/2;
if (x<= mij) Update_minus(2*nod,l,mij,x,y,cat);
if (y> mij) Update_minus(2*nod+1,mij+1,r,x,y,cat);
AI[nod].suma=AI[2*nod].suma + AI[2*nod+1].suma;
}
}
int Question(int nod, int l , int r, int x, int y)
{
if (x<=l && r<=y)
return AI[nod].suma;
else {
int mij=(l+r)/2,rez_l=0,rez_r=0;
if (x<=mij) rez_l=Question(2*nod,l,mij,x,y);
if (y> mij) rez_r=Question(2*nod+1,mij+1,r,x,y);
return (rez_l+rez_r);
}
}
int main(void)
{
freopen(_fin,"r",stdin);
freopen(_fout,"w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
Update_plus(1, 1, n, i, i, x);
}
for (i=1;i<=m;i++)
{
int x, y, z;
scanf("%d%d%d",&x,&y,&z);
if (!x)
Update_minus(1, 1, n, y, y, z);
else printf("%d\n",Question(1, 1, n, y, z));
}
fclose(stdin);
fclose(stdout);
return 0;
}