//Ilie Dumitru
#include<cstdio>
int p0, p1, pos, val, arb[15001*40];
int query(int nod, int st, int dr)
{
if(p0<=st && dr<=p1)
return arb[nod];
int a=0, b=0, mid=(st+dr)>>1;
if(p0<=mid)
a=query(nod<<1, st, mid);
if(mid<p1)
b=query((nod<<1)+1, mid+1, dr);
return a+b;
}
void update(int nod, int st, int dr)
{
if(st==dr)
arb[nod]=val;
else
{
int mid=(st+dr)>>1;
if(pos<=mid)
update(nod<<1, st, mid);
else
update((nod<<1)+1, mid+1, dr);
arb[nod]=arb[(nod<<1)+1]+arb[nod<<1];
}
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int N, M, op, a, b, v[15001];
scanf("%i%i", &N, &M);
for(pos=1;pos<=N;++pos)
{
scanf("%i", &val);
v[pos]=val;
update(1, 1, N);
}
while(M--)
{
scanf("%i%i%i", &op, &a, &b);
if(op)
{
p0=a;
p1=b;
printf("%i\n", query(1, 1, N));
}
else
{
val=v[a]=v[a]-b;
pos=a;
update(1, 1, N);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}