#include <cstdio>
#include <algorithm>
using namespace std;
#define nmax 15005
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
int n,m,v[nmax],arb[nmax<<2],mx,mxg;
void build(int nod,int poz,int val,int st,int dr)
{
int mid=(st+dr)/2;
if (st==dr&&st==poz)
{
arb[nod]=val;
return;
}
if (poz<=mid)
build(nod*2,poz,val,st,mid);
else
build(nod*2+1,poz,val,mid+1,dr);
arb[nod]=arb[nod*2]+arb[nod*2+1];
}
void query(int nod,int margst,int margdr,int st,int dr)
{
int mid=(st+dr)/2;
if (margst<=st&&dr<=margdr)
{
mx+=arb[nod];
return;
}
if (st>margdr||dr<margst)
return;
query(nod*2,margst,margdr,st,mid);
query(nod*2+1,margst,margdr,mid+1,dr);
}
void read()
{
fscanf(f,"%d %d",&n,&m);
for (int i=1; i<=n; ++i)
{
fscanf(f,"%d",&v[i]);
build(1,i,v[i],1,n);
}
for (int i=1; i<=m; ++i)
{
int a,b,c;
fscanf(f,"%d %d %d",&a,&b,&c);
if (a==0)
{
v[b]=max(v[b]-c,0);
build(1,b,v[b],1,n);
}
else
{
mx=0;
query(1,b,c,1,n);
fprintf(g,"%d\n",mx);
}
}
}
int main()
{
read();
fclose(f);
fclose(g);
return 0;
}