#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
vector<int>sir, ait;
void Build(int nod, int st, int dr) {
if (st == dr) {
ait[nod] = sir[st];
return;
}
int mijloc = (st + dr) / 2;
Build(nod * 2, st, mijloc);
Build(nod * 2 + 1, mijloc + 1, dr);
ait[nod] = ait[nod * 2] + ait[nod * 2 + 1];
}
void Update(int nod, int st, int dr, int poz, int val) {
if (st == dr) {
ait[nod] -= val;
return;
}
int mijloc = (st + dr) / 2;
if (poz <= mijloc) {
Update(nod * 2, st, mijloc, poz, val);
}
else {
Update(nod * 2 + 1, mijloc + 1, dr, poz, val);
}
ait[nod] = ait[nod * 2] + ait[nod * 2 + 1];
}
int query(int nod, int st, int dr, int L, int R) {
if (L <= st && R >= dr) {
return ait[nod];
}
else if (st > R || dr < L) {
return 0;
}
int mijloc = (st + dr) / 2;
return query(nod * 2, st, mijloc, L, R) + query(nod * 2 + 1, mijloc + 1, dr, L, R);
}
int main() {
fin >> n >> m;
sir.resize(n + 1);
ait.resize(4 * (n + 1));
for (int i = 1; i <= n; i++) {
fin >> sir[i];
}
int optiune;
Build(1, 1, n);
while (m--) {
fin >> optiune;
if (optiune) {
int P, Q;
fin >> P >> Q;
fout << query(1, 1, n, P, Q) << '\n';
}
else {
int T, V;
fin >> T >> V;
Update(1, 1, n, T, V);
}
}
}