#include <bits/stdc++.h>
#define NMAX 100005
int n, t[4 * NMAX];
void build(int a[], int v, int tl, int tr) {
if (tl == tr) {
t[v] = a[tl];
} else {
int tm = (tl + tr) / 2;
build(a, v * 2, tl, tm);
build(a, v * 2 + 1, tm + 1, tr);
t[v] = t[v * 2] + t[v * 2 + 1];
}
}
int sum(int v, int tl, int tr, int l, int r) {
if (l > r) {
return 0;
}
if (l == tl && r == tr) {
return t[v];
}
int tm = (tl + tr) / 2;
return sum(2 * v, tl, tm, l, std::min(r, tm)) +
sum (2 * v + 1, tm + 1, tr, std::max(l, tm + 1), r);
}
void update(int v, int tl, int tr, int new_index, int new_value) {
if (tl == tr) {
t[v] += new_value;
return;
}
int tm = (tl + tr) / 2;
if (new_index <= tm) {
update(2 * v, tl, tm, new_index, new_value);
} else {
update(2 * v + 1, tm + 1, tr, new_index, new_value);
}
t[v] = t[2 * v] + t[2 * v + 1];
}
int main() {
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
int n, m;
fin >> n >> m;
int a[NMAX] = {};
for (int i = 0; i < n; ++i) {
fin >> a[i];
}
build(a, 1, 0, n - 1);
for (int i = 0; i < m; ++i) {
int query_type;
fin >> query_type;
if (query_type == 0) {
int index, value;
fin >> index >> value;
update(1, 0, n - 1, index - 1, -value);
} else if (query_type == 1) {
int l, r;
fin >> l >> r;
fout << sum(1, 0, n - 1, l - 1, r - 1) << "\n";
}
}
return 0;
}