#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int DIM = 15010;
int n, m, op, x, y;
int arr[DIM];
int segmentTree[DIM * 4];
void build(int node, int left, int right) {
if (left == right) {
segmentTree[node] = arr[left];
} else {
int middle = (left + right) / 2;
build(2 * node, left, middle);
build(2 * node + 1, middle + 1, right);
segmentTree[node] = segmentTree[2 * node] + segmentTree[2 * node + 1];
}
}
void update(int node, int left, int right, int pos, int newVal) {
if (left == right) {
segmentTree[node] -= newVal;
} else {
int middle = (left + right) / 2;
if (pos <= middle)
update(2 * node, left, middle, pos, newVal);
else
update(2 * node + 1, middle + 1, right, pos, newVal);
segmentTree[node] = segmentTree[2 * node] + segmentTree[2 * node + 1];
}
}
int query(int node, int left, int right, int qleft, int qright) {
if (qleft <= left && right <= qright)
return segmentTree[node];
int middle = (left + right) / 2;
if (qright <= middle)
return query(2 * node, left, middle, qleft, qright);
if (middle + 1 <= qleft)
return query(2 * node + 1, middle + 1, right, qleft, qright);
return query(2 * node, left, middle, qleft, qright) +
query(2 * node + 1, middle + 1, right, qleft, qright);
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> arr[i];
build(1, 1, n);
for (int i = 1; i <= m; i++) {
fin >> op >> x >> y;
if (op == 0)
update(1, 1, n, x, y);
else
fout << query(1, 1, n, x, y) << '\n';
}
return 0;
}