#include <stdio.h>
int _data[32768];
int query(int n, int left, int right, int a, int b)
{
if(a <= left && right <= b)
return _data[n];
int r = 0, middle = (left+right)/2;
if(a <= middle)
r += query(2*n, left, middle, a, b);
if(b > middle)
r += query(2*n+1, middle+1, right, a, b);
return r;
}
void update(int n, int left, int right, int a, int b, int v)
{
if(a <= left && right <= b) {
_data[n] += v;
return;
}
int middle = (left+right)/2;
if(a <= middle)
update(2*n, left, middle, a, b, v);
if(b > middle)
update(2*n+1, middle+1, right, a, b, v);
_data[n] = _data[n*2]+_data[n*2+1];
}
int N, M;
int main()
{
int i, a, b, c;
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d", &N, &M);
for(i = 1; i <= N; ++ i) {
scanf("%d", &a);
update(1, 1, N, i, i, a);
}
for(i = 0; i < M; ++ i) {
scanf("%d %d %d", &a, &b, &c);
if(a) {
int tmp = query(1, 1, N, b, c);
printf("%d\n", tmp);
}
else update(1, 1, N, b, b, -c);
}
return 0;
}