#include <cstdio>
#define NMAX 15001
#define max(a, b) a >= b ? a : b
using namespace std;
int T[4 * NMAX + 66];
int N, M, poz, val;
FILE *f = freopen("datorii.in", "r", stdin);
FILE *g = freopen("datorii.out", "w", stdout);
void update(int node, int left, int right, int poz, int val) {
if(left == right) {
T[node] -= val;
return ;
}
int m = (left + right) / 2;
if(m >= poz)
update(2 * node, left, m, poz, val);
else update(2 * node + 1, m + 1, right, poz, val);
T[node] = T[2*node] + T[2*node + 1];
}
int query(int node, int left, int right, int x, int y) {
int s1 = 0, s2 = 0;
int m = (left + right) / 2;
if(left >= x && right <= y) {
return(T[node]);
}
if(m >= x) s1 = query(2 * node, left, m, x, y);
if(m < y) s2 = query(2 * node + 1, m + 1, right, x, y);
return (s1 + s2);
}
int main() {
int x;
scanf("%d%d", &N, &M);
for(int i = 1; i<=N; i++) {
scanf("%d", &x);
update(1, 1, N, i, -x);
}
for(int i = 1; i<=M; i++) {
int type, poz, x, y;
scanf("%d", &type);
if(type == 0) {
scanf("%d%d", &poz, &x);
update(1, 1, N, poz, x);
}
else {
scanf("%d%d", &x, &y);
printf("%d\n", query(1, 1, N, x, y));
}
}
return 0;
}