#include <iostream>
#include <fstream>
#define NMAX 15000
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int v[NMAX + 1];
int aint[NMAX * 4 + 1];
int join(int a, int b) {
return a + b;
}
void build(int poznode, int l, int r) {
if (l == r) {
aint[poznode] = v[l];
return;
}
int mid = (l + r) / 2;
build(poznode * 2, l, mid);
build(poznode * 2 + 1, mid + 1, r);
aint[poznode] = join(aint[poznode * 2], aint[poznode * 2 + 1]);
}
void update(int poznode, int l, int r, int poz, int val) {
if (l == r) {
aint[poznode] -= val;
return;
}
int mid = (l + r) / 2;
if (poz <= mid)
update(poznode * 2, l, mid, poz, val);
else
update(poznode * 2 + 1, mid + 1, r, poz, val);
aint[poznode] = join(aint[poznode * 2], aint[poznode * 2 + 1]);
}
int query(int poznode, int l, int r, int a, int b) {
if (l >= a && r <= b)
return aint[poznode];
int mid = (l + r) / 2, sum = 0;
if (a <= mid)
sum += query(poznode * 2, l, mid, a, b);
if (b >= mid + 1)
sum += query(poznode * 2 + 1, mid + 1, r, a, b);
return sum;
}
int main() {
int n, m, i, op, a, b;
fin >> n >> m;
for (i = 1; i <= n; i++)
fin >> v[i];
build(1, 1, n);
while (m--) {
fin >> op >> a >> b;
if (op == 0)
update(1, 1, n, a, b);
else
fout << query(1, 1, n, a, b) << "\n";
}
return 0;
}