/* Ivan Nicolae - Bucuresti */
/* Datorii - Arbori de Intervale */
#include <stdio.h>
#define NMAX 15001
#define _fin "datorii.in"
#define _fout "datorii.out"
int i,n,m,AI[2*NMAX];
void Update_add(int nod, int l, int r, int x, int y, int suma)
{
if (x<=l && r<=y)
AI[nod]+=suma;
else {
int mij=(l+r)/2;
if (x<=mij && 2*nod<2*NMAX) Update_add(2*nod,l,mij,x,y,suma);
if (y> mij && 2*nod+1<2*NMAX) Update_add(2*nod+1,mij+1,r,x,y,suma);
AI[nod]=AI[2*nod]+AI[2*nod+1];
}
}
void Update_sub(int nod, int l, int r, int x, int y, int suma)
{
if (x<=l && r<=y)
AI[nod]-=suma;
else {
int mij=(l+r)/2;
if (x<=mij && 2*nod<2*NMAX) Update_sub(2*nod,l,mij,x,y,suma);
if (y> mij && 2*nod+1<2*NMAX) Update_sub(2*nod+1,mij+1,r,x,y,suma);
AI[nod]=AI[2*nod]+AI[2*nod+1];
}
}
int Question(int nod, int l, int r, int x, int y)
{
if (x<=l && r<=y)
return AI[nod];
else {
int mij=(l+r)/2,rez_l=0,rez_r=0;
if (x<=mij && 2*nod<2*NMAX) rez_l=Question(2*nod,l,mij,x,y);
if (y> mij && 2*nod+1<2*NMAX) 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_add(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_sub(1,1,n,y,y,z);
else printf("%d\n",Question(1,1,n,y,z));
}
fclose(stdin);
fclose(stdout);
return 0;
}