#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int MAXN = 15000;
int N, M;
long long arb[4 * MAXN + 5];
void build(int nod, int st, int dr) {
if (st == dr) {
fin >> arb[nod];
return;
}
int mid = (st + dr) / 2;
build(nod * 2, st, mid);
build(nod * 2 + 1, mid + 1, dr);
arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}
void update(int nod, int st, int dr, int poz, long long val) {
if (st == dr) {
arb[nod] -= val;
return;
}
int mid = (st + dr) / 2;
if (poz <= mid)
update(nod * 2, st, mid, poz, val);
else
update(nod * 2 + 1, mid + 1, dr, poz, val);
arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}
long long query(int nod, int st, int dr, int l, int r) {
if (l <= st && dr <= r)
return arb[nod];
int mid = (st + dr) / 2;
long long s = 0;
if (l <= mid)
s += query(nod * 2, st, mid, l, r);
if (r > mid)
s += query(nod * 2 + 1, mid + 1, dr, l, r);
return s;
}
int main() {
fin >> N >> M;
build(1, 1, N);
for (int i = 1; i <= M; i++) {
int tip, a, b;
fin >> tip >> a >> b;
if (tip == 0) {
update(1, 1, N, a, b);
} else {
fout << query(1, 1, N, a, b) << "\n";
}
}
return 0;
}