#include <cstdio>
#define fs (node << 1)
#define fd ((node << 1) + 1)
int aint[1 << 15];
int n, m;
void update(int node, int lf, int rt, int val, int poz) {
if(lf == rt) {
aint[node] += val;
return ;
}
int mid = (lf + rt) >> 1;
if(poz <= mid) update(fs, lf, mid, val, poz);
if(poz > mid) update(fd, mid + 1, rt, val, poz);
aint[node] = aint[fs] + aint[fd];
}
int sol = 0;
void query(int node, int lf, int rt, int a, int b) {
if(a <= lf && b >= rt) {
sol += aint[node];
return ;
}
int mid = (lf + rt) >> 1;
if(a <= mid) query(fs, lf, mid, a, b);
if(b > mid) query(fd, mid + 1, rt, a, b);
}
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int t, x, y;
scanf("%d %d\n", &n, &m);
for(int i = 1; i <= n; ++i) {
scanf("%d", &x);
update(1, 1, n, x, i);
}
while(m--) {
scanf("%d %d %d", &t, &x, &y);
if(t == 0)
update(1, 1, n, -y, x);
else {
sol = 0;
query(1, 1, n, x, y);
printf("%d\n", sol);
}
}
return 0;
}