#include<stdio.h>
#define max(a,b) a+b
#define Nmax 15010
int ar[4*Nmax],a,b,n,op,m,maxl;
int done=0;
void update(int val,int poz,int nod, int st,int dr)
{
if(st==dr)
{
ar[nod]-=val;
return;
}
int mij;
mij=(st+dr)/2;
if(poz<=mij)
update(val,poz,2*nod,st,mij);
else
update(val,poz,2*nod+1,mij+1,dr);
ar[nod]=max(ar[2*nod],ar[2*nod+1]);
}
void query(int nod, int st,int dr, int a, int b)
{
if(st>=a && dr<=b)
{
maxl+=ar[nod];
return;
}
int mij=(st+dr)/2;
if(a<=mij)
query(2*nod,st,mij,a,b);
if(b>mij)
query(2*nod+1,mij+1,dr,a,b);
}
int main()
{
int x;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
update(-x,i,1,1,n);
}
done=1;
for(int j=1;j<=m;j++)
{ scanf("%d%d%d",&op,&a,&b);
if(op==1)
{
maxl=0;
query(1,1,n,a,b);//in loc de 1,n trebuie 1 si ultima pozitie din interval.
printf("%d\n",maxl);
}
else
{
update(b,a,1,1,n);
}
}
return 0;
}