#include <cstdio>
using namespace std;
#define init m = (l + r)/2, L = n << 1, R = L | 1
#define NMAX 15001
int H[3 * NMAX];
int A[NMAX];
inline void update (int n, int l, int r, int p, int v){
if (l == r){H[n] -= v; return;}
int init;
if (p <= m) update (L, l, m, p, v);
else
update (R, m + 1, r, p, v);
H[n] = H[L] + H[R];
}
inline int query (int n, int l, int r, int i, int j){
if (i <= l && r <= j) return H[n];
int m = (l + r) / 2; int sol = 0;
if (i <= m) sol = sol + query(2 * n, l, m, i, j);
if (j > m) sol = sol + query(2 * n + 1, m + 1, r, i, j);
return sol;
}
void build (int n, int l, int r){
if (l == r){H[n] = A[l]; return;}
int init;
build (L, l, m);
build (R, m + 1, r);
H[n] = H[R] + H[L];
}
int i, N, M;
int T, V, op;
int P, Q;
int main() {
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%i%i", &N, &M);
for (i = 1; i <= N; ++i)
scanf("%i", &A[i]);
build(1, 1, N);
for (i = 1; i <= M; ++i) {
scanf("%i", &op);
if (!op) {
scanf("%i%i", &T, &V);
update(1, 1, N, T, V);
}
else {
scanf("%i%i", &P, &Q);
printf("%i\n", query(1, 1, N, P, Q));
}
}
return 0;
}