#include <iostream>
#include <fstream>
using namespace std;
int n,m,i,s=2,maxim;
int v[100001];
ifstream f("datorii.in");
ofstream g("datorii.out");
void up(int poz, int a,int b,int st,int dr);
void que(int poz,int a,int b,int st,int dr);
int main(){
bool x; int b,a;
f>>n>>m;
while(s<n) s*=2;
for(short i=1;i<=n;i++)
{f>>b; up(1,i,b,1,s);}
while(m--){
f>>x>>a>>b;
if(x){
maxim=0;
que(1,a,b,1,s);
g<<maxim<<endl;
}
else{
up(1,a,-b,1,s);
}
}
f.close();g.close();
return 0;
}
void up(int poz, int a,int b,int st,int dr){
if(st==dr){
v[poz]+=b;
return;}
int mij=(st+dr)/2;
if(a<=mij) up(2*poz,a,b,st,mij);
else up(2*poz+1,a,b,mij+1,dr);
v[poz]=v[2*poz]+v[2*poz+1];
}
void que(int poz,int a,int b,int st,int dr){
if(st>=a && b>=dr){
if(v[poz]>maxim)maxim+=v[poz];
return;}
else{
int mij=(st+dr)/2;
if(a<=mij) que(2*poz,a,b,st,mij);
if(b>mij) que(2*poz+1,a,b,mij+1,dr);
}
}