#include <stdio.h>
#define DIM 32768
int A[DIM], n, m, maxim;
inline int Max(int a, int b){
return a>b?a:b;
}
void update(int nod, int st, int dr, int poz, int val){
if(st == dr){
A[nod] += val;
}
else {
int m = (st+dr)<<1;
if(poz <= m) update(2*nod, st, m, poz, val);
else update(2*nod+1, m+1, dr, poz, val);
A[nod] = A[2*nod] + A[2*nod+1];
}
}
int query(int nod, int st, int dr, int a, int b){
if(a<=st && dr<=b)
{return A[nod];}
else{
int m = (st+dr)<<1, v1=0, v2=0;
if(a<=m) v1 = query(2*nod, st, m, a, b);
if(b>m) v2 = query(2*nod+1, m+1, dr, a, b);
return v1+ v2;
}
}
int main(){
int i, u, v, t;
FILE *f=fopen("datorii.in", "r");
FILE *g=fopen("datorii.out", "w");
fscanf(f, "%d %d", &n, &m);
for(i=1; i<=n; i++){
fscanf(f, "%d", &u);
update(1, 1, n, i, u);
}
for(i=1; i<=m; i++){
fscanf(f, "%d %d %d", &t, &u, &v);
if(t==0) update(1, 1, n, u, -v);
else {maxim = query(1, 1, n, u, v); fprintf(g, "%d\n", maxim); }
}
fclose(f);
fclose(g);
return 0;
}