#include <iostream>
#include <fstream>
#define NMAX 15000
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
struct arb
{
int info;
arb *stg=NULL,*dr=NULL;
};
int buildArb(arb *&a,int s,int d,int *v)
{
a=new arb;
if(s==d)
{
a->info=v[s];
return v[s];
}
int m=(s+d)/2;
a->info=buildArb(a->stg,s,m,v)+buildArb(a->dr,m+1,d,v);
return a->info;
}
int getSum(arb *&a,int x,int y,int s,int d)
{
if(s>y || d<x)
return 0;
if(s>=x && d<=y)
return a->info;
int m=(s+d)/2;
return getSum(a->stg,x,y,s,m)+getSum(a->dr,x,y,m+1,d);
}
int updateVal(arb *&a,int i,int x,int s,int d)
{
if(s==d && s==i)
{
a->info-=x;
return a->info;
}
if(s>i || d<i)
return a->info;
int m=(s+d)/2;
a->info=updateVal(a->stg,i,x,s,m)+updateVal(a->dr,i,x,m+1,d);
return a->info;
}
int main()
{
int n,m,v[NMAX],q,x,y;;
fin>>n>>m;
for(int i=0;i<n;++i)
fin>>v[i];
arb *a=NULL;
buildArb(a,0,n-1,v);
while(--m>0)
{
fin>>q>>x>>y;
if(q==1)
fout<<getSum(a,x-1,y-1,0,n-1)<<'\n';
else
updateVal(a,x-1,y,0,n-1);
}
}