#include <stdio.h>
#define MAXN 131072
int v[MAXN + 1], arb[2 * MAXN];
int query(int n, int p2, int nod, int a, int b) {
int st, dr, mij, rez;
st = (nod - p2) * (n / p2) + 1;
dr = st + n / p2 - 1;
mij = (st + dr) / 2;
if (a == st && b == dr)
return arb[nod];
if (a <= mij && b <= mij) {
rez = query(n, 2 * p2, 2 * nod, a, b);
} else if (a > mij && b > mij) {
rez = query(n, 2 * p2, 2 * nod + 1, a, b);
} else {
rez = query(n, 2 * p2, 2 * nod, a, mij) + query(n, 2 * p2, 2 * nod + 1, mij + 1, b);
}
return rez;
}
void update(int n, int idx, int val) {
int poz;
poz = n + idx - 1;
arb[poz] -= val;
n /= 2;
while (n) {
poz = (poz - (poz & 1)) / 2;
arb[poz] = arb[2 * poz] + arb[2 * poz + 1];
n /= 2;
}
}
int main() {
FILE *fin, *fout;
int n, m, p2, op, a, b, i;
fin = fopen("datorii.in", "r");
fscanf(fin, "%d%d", &n, &m);
for (i = 1; i <= n; i++) {
fscanf(fin, "%d", &v[i]);
}
p2 = 1;
while (p2 < n) {
p2 *= 2;
}
n = p2;
for (i = n; i < 2 * n; i++) {
arb[i] = v[i - n + 1];
}
p2 /= 2;
while (p2) {
for (i = p2; i < 2 * p2; i++) {
arb[i] = arb[2 * i] + arb[2 * i + 1];
}
p2 /= 2;
}
fout = fopen("datorii.out", "w");
for (i = 1; i <= m; i++) {
fscanf(fin, "%d%d%d", &op, &a, &b);
if (op == 0) {
update(n, a, b);
} else {
fprintf(fout, "%d\n", query(n, 1, 1, a, b));
}
}
fclose(fin);
fclose(fout);
return 0;
}