#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int N = 100001;
int n;
int tree[4 * N];
void update(int type, int node, int left, int right, int pos, int val) {
if (left == right) {
if (type == 1) {
tree[node] = val;
} else {
tree[node] -= val;
}
return;
}
int mid = left + (right - left) / 2;
if (pos <= mid) {
update(type, node * 2, left, mid, pos, val);
} else {
update(type, node * 2 + 1, mid + 1, right, pos, val);
}
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
int query(int node, int left, int right, int L, int R) {
if (L <= left && right <= R) {
return tree[node];
}
int mid = left + (right - left) / 2;
int sum = 0;
if (L <= mid) {
sum += query(node * 2, left, mid, L, R);
}
if (mid < R) {
sum += query(node * 2 + 1, mid + 1, right, L, R);
}
return sum;
}
int main() {
int m, op, x, y;
fin >> n >> m;
for (int i = 1; i <= n; ++i) {
fin >> x;
update(1, 1, 1, n, i, x);
}
for (int i = 1; i <= m; ++i) {
fin >> op >> x >> y;
if (op == 0) {
update(2, 1, 1, n, x, y);
} else {
fout << query(1, 1, n, x, y) << '\n';
}
}
return 0;
}