using namespace std;
#include<ios>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<utility>
#include<cstdio>
#include<cstdlib>
#include<cassert>
#include<numeric>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<deque>
#define FILES
#ifdef FILES
#include<fstream>
ifstream cin("sequencequery.in.in");
ofstream cout("sequencequery.in.out");
#else
#include<iostream>
#endif
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
#define ALL(a) a.begin(),a.end()
#define p_b(a) push_back(a)
#define m_p(a,b) make_pair(a,b)
#define p_p(a,b) p_b(m_p(a,b))
typedef unsigned char uchar;
typedef unsigned int uint;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vint;
typedef queue<int> qint;
typedef pair<int,int> pii;
typedef vector<pii> vpii;
typedef vector<string> vstr;
typedef queue<int> qint;
typedef deque<int> dqint;
typedef deque<ll> dqll;
typedef map<string,int> mpstri;
typedef map<int,int> mpinti;
typedef map<string,string> mpstrs;
typedef map<string,vstr> mpstrvs;
const int INFI=(1<<30);
const ll INFL=(1LL<<62);
const double eps=1e-7;
const long double pi=acos(-1.0);
const int MAXN=300000;
int v[60000],sum[MAXN],left_max[MAXN],right_max[MAXN],tot_max[MAXN];
void update(int nod,int st,int dr,int i,int x){
if(st==dr){
sum[nod]+=x;
left_max[nod]=right_max[nod]=tot_max[nod]=sum[nod];
return;
}
int mid=(st+dr)/2;
if(i<=mid) update(nod*2,st,mid,i,x);
else update(nod*2+1,mid+1,dr,i,x);
int lf=nod*2,rt=nod*2+1;
sum[nod]=sum[lf]+sum[rt];
left_max[nod]=max(left_max[lf],sum[lf]+left_max[rt]);
right_max[nod]=max(right_max[rt],sum[rt]+right_max[lf]);
tot_max[nod]=max3(tot_max[lf],tot_max[rt],right_max[lf]+left_max[rt]);
}
int s,mx;
void query(int nod,int st,int dr,int i,int j){
if(i<=st && dr<=j){
mx=max3(s+left_max[nod],mx,tot_max[nod]);
s=max(s+sum[nod],right_max[nod]);
mx=max(s,mx);
return;
}
int mid=(st+dr)/2;
if(i<=mid) query(nod*2,st,mid,i,j);
if(j>mid) query(nod*2+1,mid+1,dr,i,j);
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>v[i];
update(1,1,n,i,v[i]);
}
for(int i=1;i<=m;i++){
int cs=1,x,y;
cin>>x>>y;
if(!cs){
int ax=y-v[x];
update(1,1,n,x,ax);
v[x]=ax;
}else{
s=0,mx=-INFI;
query(1,1,n,x,y);
cout<<mx<<'\n';
}
}
return 0;
}