#include <cstdio>
const int N = 16;
int n, m;
int v[N];
inline int min ( int a, int b ) { return (a < b) ? a : b; }
inline int max ( int a, int b ) { return (a > b) ? a : b; }
void add ( int ci, int cis, int cid, int s, int d, int val ) {
v[ci] += val;
if (cis == s && cid == d) return;
int m = (cis+cid)/2;
if (s <= m) add(2*ci,cis,m,s,min(m,d),val);
if (d > m) add(2*ci+1,m+1,cid,max(m+1,s),d,val);
}
int query ( int ci, int cis, int cid, int s, int d ) {
if (cis == s && cid == d) return v[ci];
int r = 0;
int m = (cis+cid)/2;
if (s <= m) r += query(2*ci,cis,m,s,min(m,d));
if (d > m) r += query(2*ci+1,m+1,cid,max(m+1,s),d);
return r;
}
int main() {
freopen("datorii.in","rt",stdin);
freopen("datorii.out","wt",stdout);
scanf("%d %d",&n,&m);
for (int i = 1; i <= n; ++i) {
int x;
scanf("%d",&x);
add(1,1,n,i,i,x);
}
for (int i = 0; i < m; ++i) {
int com,a,b;
scanf("%d %d %d",&com,&a,&b);
if (com == 0)
add(1,1,n,a,a,-b); else
printf("%d\n",query(1,1,n,a,b));
}
return 0;
}