#include <fstream>
#include <iostream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, x, opt, pos, p, u, sum;
int arb[500001];
//acelasi algoritm ca la arbint, doar ca fiecare nod retine suma tuturor elementelor din interval in loc de maximul din acesta
void update(int nod, int p, int u, int pos, int val) {
int mij;
if (p == u) {
arb[nod] += val;
}
else {
mij = (p + u) / 2;
if (pos <= mij)
update(2 * nod, p, mij, pos, val);
else update(2 * nod + 1, mij + 1, u, pos, val);
arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}
}
void query(int nod, int p, int u, int ip, int iu) {
int mij;
if (ip <= p && u <= iu) {
sum += arb[nod];
}
else {
mij = (p + u) / 2;
if (ip <= mij)
query(2 * nod, p, mij, ip, iu);
if (mij < iu)
query(2 * nod + 1, mij + 1, u, ip, iu);
}
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; i++) {
f >> x;
update(1, 1, n, i, x);
}
for (int i = 0; i < m; i++) {
f >> opt;
if (!opt) {
f >> pos >> x;
update(1, 1, n, pos, -x);
}
else {
f >> p >> u;
sum = 0;
query(1, 1, n, p, u);
g << sum << "\n";
}
}
return 0;
}