#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
int aint[4 * 15001];
void buildAint(int node, int st, int dr) {
if (st == dr) {
int k;
cin >> k;
aint[node] = k;
return;
}
int mid = (st + dr) / 2;
buildAint(2 * node, st, mid);
buildAint(2 * node + 1, mid + 1, dr);
aint[node] = aint[2 * node] + aint[2 * node + 1];
}
void update(int node, int st, int dr, int t, int v) {
if (st > t || dr < t) {
return;
}
if (st == dr && st == t) {
aint[node] -= v;
return;
}
int mid = (st + dr) / 2;
update(2 * node, st, mid, t, v);
update(2 * node + 1, mid + 1, dr, t, v);
aint[node] -= v;
}
int query(int node, int st, int dr, int x, int y) {
if (st > y || dr < x) {
return 0;
}
if (st >= x && dr <= y) {
return aint[node];
}
int mid = (st + dr) / 2;
int leftSub = query(2 * node, st, mid, x, y);
int rightSub = query(2 * node + 1, mid + 1, dr, x, y);
return leftSub + rightSub;
}
int main() {
cin >> n >> m;
buildAint(1, 1, n);
for (int i = 1; i <= m; ++i) {
int op, x, y;
cin >> op >> x >> y;
if (op == 0) {
update(1, 1, n, x, y);
} else {
cout << query(1, 1, n, x, y) << "\n";
}
}
}