#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
int x, q;
int tree[60005];
void build_tree(int node, int l, int r) {
if (l==r) {
fin >> tree[node];
return;
}
int m = (l+r)>>1;
build_tree(node<<1,l,m);
build_tree(node<<1|1,m+1,r);
tree[node] = tree[node<<1] + tree[node<<1|1];
}
void update(int node, int l, int r, int poz, int val) {
if (l==r) {
tree[node] -= val;
return;
}
int m = (l+r)>>1;
if (poz<=m) update(node<<1,l,m,poz,val);
if (poz>m) update(node<<1|1,m+1,r,poz,val);
tree[node] = tree[node<<1] + tree[node<<1|1];
}
int query(int node, int l, int r, int st, int fi) {
if (l>fi||r<st) return 0;
if (st<=l&&r<=fi) {
return tree[node];
}
int m = (l+r)>>1;
return query(node<<1,l,m,st,fi) + query(node<<1|1,m+1,r,st,fi);
}
int main() {
fin >> x >> q;
build_tree(1,1,x);
while (q--) {
int op, a, b;
fin >> op >> a >> b;
if (op==0) {
update(1,1,x,a,b);
}
else {
fout << query(1,1,x,a,b) << "\n";
}
}
}