#include <iostream>
#include <cstdio>
using namespace std;
const int NMAX = 15001;
struct Nod{
int st,dr,value;
}arb[4*NMAX];
int A[NMAX];
void build(int nod, int st, int dr){
arb[nod].st = st;
arb[nod].dr = dr;
if(st == dr){
arb[nod].value = A[st];
return;
}
int middle = (st+dr)/2;
build(2*nod,st,middle);
build(2*nod+1,middle+1,dr);
arb[nod].value = (arb[2*nod].value + arb[2*nod+1].value);
}
void update(int nod, int where, int new_value){
int middle = (arb[nod].st + arb[nod].dr)/2;
if(arb[nod].st == arb[nod].dr){
arb[nod].value-=new_value;
return;
}
if(where <= middle)
update(2*nod, where, new_value);
else
update(2*nod+1, where, new_value);
arb[nod].value = (arb[2*nod].value + arb[2*nod + 1].value);
}
int query(int nod, int st, int dr){
if(arb[nod].st == st && arb[nod].dr == dr)
return arb[nod].value;
int middle = (arb[nod].st + arb[nod].dr)/2;
if(dr <= middle)
return query(2*nod, st, dr);
if(st > middle)
return query(2*nod + 1, st, dr);
return query(2*nod, st, middle) + query(2*nod + 1, middle + 1, dr);
}
int main()
{
FILE *fin, *fout;
int n,m,tip,x,y,i,j;
fin=fopen("datorii.in","r");
fout=fopen("datorii.out","w");
fscanf(fin,"%d %d",&n,&m);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&A[i]);
build(1,1,n);
for(i=1;i<=m;i++){
fscanf(fin,"%d %d %d\n",&tip,&x,&y);
if(tip == 0)
update(1,x,y);
else
fprintf(fout,"%d\n",query(1,x,y));
}
fclose(fin);
fclose(fout);
return 0;
}