#include <fstream>
#include <vector>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int const NMAX = 15000;
struct SegmentTree {
vector <int> seg;
SegmentTree(int n) {
seg.resize(4 * n);
}
void update(int node, int from, int to, int pos, int x) {
if(from == to) {
seg[node] += x;
}else {
int mid = (from + to) / 2;
if(x <= mid) {
update(node * 2, from, mid, pos, x);
}else {
update(node * 2 + 1, mid+1, to, pos, x);
}
seg[node] = seg[node * 2] + seg[node * 2 + 1];
}
}
int query(int node, int from, int to, int x, int y) {
if(from == x && to == y) {
return seg[node];
}else {
int mid = (from + to) / 2, ans = 0;
if(x <= mid) {
ans += query(node * 2, from, mid, x, min(y, mid));
}
if(mid < y) {
ans += query(node * 2 + 1, mid+1, to, max(mid+1, x), y);
}
return ans;
}
}
};
int main() {
int n, t;
in >> n >> t;
SegmentTree seg(n);
for(int i = 1;i <= n;i++) {
int c;
in >> c;
seg.update(1, 1, n, i, c);
}
for(int i = 1;i <= t;i++) {
int cer, a, b;
in >> cer >> a >> b;
if(cer == 0) {
seg.update(1, 1, n, a, -b);
}else {
out << seg.query(1, 1, n, a, b) << '\n';
}
}
return 0;
}