#include<stdio.h>
long arb[60000];
int n,m;
void go();
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
go();
return 0;
}
void update(int i, int j, int p, int nod, int v) {
if(i==j && j==p) {
arb[nod]=v;
return;
}
int mij=(i+j)/2;
if(p<=mij)
update(i,mij,p,nod*2,v);
else
update(mij+1,j,p,nod*2+1,v);
arb[nod]=arb[nod*2]+arb[nod*2+1];
}
void update2(int i, int j, int p, int nod, int v) {
if(i==j && j==p) {
arb[nod]-=v;
return;
}
int mij=(i+j)/2;
if(p<=mij)
update2(i,mij,p,nod*2,v);
else
update2(mij+1,j,p,nod*2+1,v);
arb[nod]=arb[nod*2]+arb[nod*2+1];
}
long query(int i, int j, int x, int y, int nod) {
if(x<=i && j<=y)
return arb[nod];
int mij=(i+j)/2;
long r=0;
if(x<=mij)
r+=query(i,mij,x,y,nod*2);
if(mij<y)
r+=query(mij+1,j,x,y,nod*2+1);
return r;
}
void go() {
int i,j;
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++) {
int x;
scanf("%d", &x);
update(1,n,i,1,x);
}
for(i=1; i<=m; i++) {
int a,b,c;
scanf("%d%d%d", &c, &a, &b);
if(c) { //query = suma [a,b]
long g = query(1,n,a,b,1);
printf("%ld\n",g);
}else { //update
update2(1,n,a,1,b);
}
}
}