#include <stdio.h>
#define NMAX 15000 * 4
int v [ NMAX + 1 ] ;
int suma [ NMAX + 1 ] ;
void init(int nod, int st, int dr) {
if (st == dr) {
suma[nod] = v[st];
} else {
int mij = (st + dr) / 2;
init(2 * nod, st, mij) ;
init(2 * nod + 1, mij + 1, dr);
suma[nod] = suma[2 * nod] + suma[2 * nod + 1];
}
}
int query(int nod, int st, int dr, int left, int right) {
if (st == left && dr == right) {
return suma[nod];
} else {
int mij = (st + dr) / 2;
if (right <= mij)
return query(2 * nod, st, mij, left, right);
else if (mij < left)
return query(2 * nod + 1, mij + 1, dr, left, right);
else
return query(2 * nod, st, mij, left, mij)
+ query(2 * nod + 1, mij + 1, dr, mij + 1, right);
}
}
void update(int nod, int st, int dr, int index, int newValue) {
if (st == dr) {
suma[nod] -= newValue;
} else {
int mij = (st + dr) / 2;
if (index <= mij)
update(2 * nod, st, mij, index, newValue);
else
update(2 * nod + 1, mij + 1, dr, index, newValue);
suma[nod] = suma[2 * nod] + suma[2 * nod + 1];
}
}
int main() {
FILE *fin, *fout ;
fin = fopen ("datorii.in", "r" ) ;
fout = fopen ("datorii.out", "w" ) ;
int n, i, m, op, t1, t2 ;
fscanf (fin, "%d%d", &n, &m ) ;
for (i = 1 ; i <= n ; i++ )
fscanf (fin, "%d", &v[i] ) ;
init(1, 1, n) ;
for (i = 1 ; i <= m ; i++ ) {
fscanf (fin, "%d%d%d", &op, &t1, &t2 ) ;
if (op == 0 )
update (1, 1, n, t1, t2 ) ;
else
fprintf (fout, "%d\n", query (1, 1, n, t1, t2 ) ) ;
}
return 0;
}