#include <stdio.h>
#define nodes 220000
#define nmax 16000
int N, M;
int V[nodes], A[nmax];
void create(int node, int l, int r)
{
if (l == r)
{
V[node] = A[l];
return;
}
int m = (l+r)>>1;
create(node<<1, l, m);
create(node<<1|1, m+1, r);
V[node] = V[node<<1] + V[node<<1|1];
}
void update(int node, int p, int l, int r, int v)
{
if (l == r)
{
V[node] -= v;
return;
}
int m = (l+r)>>1;
if (p <= m)
update(node<<1, p, l, m, v);
else
update(node<<1|1, p, m+1, r, v);
V[node] = V[node<<1] + V[node<<1|1];
}
int query(int node, int a, int b, int l, int r)
{
if (a <= l && r <= b)
return V[node];
int m = (l+r)>>1, x = 0;
if (a <= m)
x += query(node<<1, a, b, l, m);
if (b > m)
x += query(node<<1|1, a, b, m+1, r);
return x;
}
int main()
{
int i, t, a, b;
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d%d", &N, &M);
for (i = 1; i <= N; ++i)
scanf("%d", &A[i]);
create(1, 1, N);
while (M--)
{
scanf("%d%d%d", &t, &a, &b);
if (t == 0)
update(1, a, 1, N, b);
else
printf("%d\n", query(1, a, b, 1, N));
}
return 0;
}