#include <iostream>
#include <fstream>
#define N 20010
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int maxArb[4*N+66],i,j,n,m,k,t,p,r,pos,val,start,finish,sum=0;
void update(int nod,int left,int right)
{
if(left==right)
{
maxArb[nod]=val;
return;
}
int mij=(left+right)/2;
if(pos<=mij)
update(2*nod,left,mij);
else
update(2*nod+1,mij+1,right);
maxArb[nod]=max(maxArb[2*nod],maxArb[2*nod+1]);
}
int query(int nod,int left,int right)
{
if(left==right)
{
return maxArb[nod];
}
int mij=(left+right)/2;
int sum=0;
if(start<=mij)
sum=sum+query(2*nod,left,mij);
if(mij<finish)
sum=sum+query(2*nod+1,mij+1,right);
return sum;
}
void reduc(int nod,int left,int right)
{
if(left==right)
{
maxArb[nod]=maxArb[nod]-val;
return;
}
int mij=(left+right)/2;
if(pos<=mij)
reduc(2*nod,left,mij);
else
reduc(2*nod+1,mij+1,right);
}
int main()
{
int x,y,z;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
pos=i;
val=x;
update(1,1,n);
}
while(m!=0)
{
f>>x>>y>>z;
if(x==1)
{
start=y;
finish=z;
g<<query(1,1,n)<<"\n";
}
else
{
pos=y;
val=z;
reduc(1,1,n);
}
m--;
}
}