#include <iostream>
#include <fstream>
using namespace std;
int aint[50000], v[15000];
void build (int node, int st, int dr ) {
if (st == dr) aint[node] = v[st];
else {
int mi = (st + dr) / 2;
build(2 * node + 1, st, mi);
build(2 * node + 2, mi + 1, dr);
aint[node] = aint[2 * node + 1] + aint[2 * node + 2];
}
}
void update (int node, int st, int dr, int x, int y) {
if (st == dr) aint[node] -= y;
else {
int mi = (st + dr) / 2;
if (x <= mi) update(2 * node + 1, st, mi, x, y);
else update(2 * node + 2, mi + 1, dr, x, y);
aint[node] = aint[2 * node + 1] + aint[2 * node + 2];
}
}
int query (int node, int st, int dr, int x, int y ) {
if (x <= st && dr <= y) return aint[node];
else {
int mi = (st + dr) / 2;
int ans = 0;
if (x <= mi) ans += query(2 * node + 1, st, mi, x, y);
if (y > mi) ans += query(2 * node + 2, mi + 1, dr, x, y);
return ans;
}
}
int main()
{
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, i;
f >> n >> m;
for (i = 1; i <= n; ++i)
f >> v[i];
build(0, 1, n);
int b, x, y;
for (i = 1; i <= m; ++i) {
f >> b >> x >> y;
if (b == 0) update(0, 1, n, x, y);
else g << query(0, 1, n, x, y) << "\n";
}
return 0;
}