#include <bits/stdc++.h>
#define nl '\n'
#define ll int
using namespace std;
const int N = 2e5 + 2;
int n, q, tree[N], val[N];
ifstream in("datorii.in");
ofstream out("datorii.out");
void build(ll v, ll l, ll r) {
if (l == r)
tree[v] = val[l];
else {
ll M = (l + r) / 2;
build(2 * v, l, M);
build(2 * v + 1, M + 1, r);
tree[v] = tree[2 * v] + tree[2 * v + 1];
}
}
void update(ll v, ll l, ll r, ll poz, ll vals) {
if (l == r)
tree[v] -= vals;
else {
ll M = (l + r) / 2;
if (M >= poz)
update(2 * v, l, M, poz, vals);
else update(2 * v + 1, M + 1, r, poz, vals);
tree[v] = tree[v * 2 + 1] + tree[v * 2];
}
}
ll answer(ll v, ll l, ll r, ll ql, ll qr) {
if (ql > qr)
return 0;
if (ql >= l and r <= qr)
return tree[v];
else {
ll M = (l + r) / 2;
return answer(2 * v + 1, M + 1, r, max(ql, M + 1), qr) + answer(2 * v, l, M, ql, min(qr, M));
}
}
int main() {
in >> n >> q;
for (int i = 1; i <= n; i++)
in >> val[i];
build(1, 1, n);
for (int i = 1; i <= q; i++) {
ll cer, x, y;
in >> cer >> x >> y;
if (cer == 1)
out << answer(1, 1, n, x, y) << nl;
if (cer == 0)
update(1, 1, n, x, y);
}
return 0;
}