#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int maxn = 15000;
int aint[4*maxn];
void update(int nod, int left, int right, int poz, int delta) {
if (right == left) {
aint[nod] += delta;
return;
}
int mij = (left + right)/2;
if (poz <= mij)
update(nod*2, left, mij, poz, delta);
else
update(nod*2 + 1, mij + 1, right, poz, delta);
aint[nod] = aint[nod*2] + aint[nod*2 + 1];
}
int query(int nod, int left, int right, int ql, int qr) {
if (left == ql && right == qr)
return aint[nod];
int mij = (left + right)/2;
if (qr <= mij)
return query(nod*2, left, mij, ql, qr);
if (ql > mij)
return query(nod*2 + 1, mij + 1, right, ql, qr);
return query(nod*2, left, mij, ql, mij) + query(nod*2 + 1, mij + 1, right, mij + 1, qr);
}
int main() {
int n, m;
fin >> n >> m;
int aintn = 1;
while (aintn < n)
aintn <<= 1;
for (int i = 0; i < n; i++)
fin >> aint[aintn + i];
for (int i = aintn - 1; i > 0; i--)
aint[i] = aint[i*2] + aint[i*2 + 1];
for (int i = 0; i < m; i++) {
int a, b, c;
fin >> a >> b >> c;
if (a == 1)
fout << query(1, 1, n, b, c) << '\n';
else
update(1, 1, n, b, -c);
}
return 0;
}