#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
const int N=2e5+1;
int n,q;
ll a[N];
typedef pair<ll,ll> pll;
pll in[524288];
pll f(int x){
if(a[x]==a[x+1]) return {0LL,(ll)2e9};
if(a[x]<a[x+1]) return {0LL,(a[x]+a[x+1])/2};
else return {(a[x]+a[x+1]+1)/2,(ll)2e9};
}
pll g(pll x,pll y){
return {max(x.fi,y.fi),min(x.se,y.se)};
}
void build(int id,int l,int r){
if(l==r){
in[id]=f(l);return;
}
int mid=(l+r)/2;
build(id*2,l,mid);
build(id*2+1,mid+1,r);
in[id]=g(in[id*2],in[id*2+1]);
}
void upd(int id,int l,int r,int p){
if(l==r){
in[id]=f(l);return;
}
int mid=(l+r)/2;
if(p<=mid) upd(id*2,l,mid,p);
else upd(id*2+1,mid+1,r,p);
in[id]=g(in[id*2],in[id*2+1]);
}
pll qry(int id,int l,int r,int ql,int qr){
if(l>qr || r<ql) return {0LL,(ll)2e9};
if(ql<=l && r<=qr) return in[id];
int mid=(l+r)/2;
return g(qry(id*2,l,mid,ql,qr),qry(id*2+1,mid+1,r,ql,qr));
}
void flow(int id,int l,int r){
cout << id << ' ' << l << ' ' << r << ' ' << in[id].fi << ' ' << in[id].se << endl;
if(l==r) return;
int mid=(l+r)/2;
flow(id*2,l,mid);
flow(id*2+1,mid+1,r);
}
void solve(){
cin >> n >> q;
for(int i=1; i<=n ;i++) cin >> a[i];
build(1,1,n-1);
//flow(1,1,n-1);
for(int i=1; i<=q ;i++){
int t;cin >> t;
if(t==1){
int x;cin >> x;cin >> a[x];
if(x!=1) upd(1,1,n-1,x-1);
if(x!=n) upd(1,1,n-1,x);
}
else{
int l,r;cin >> l >> r;
if(l==r) cout << "0\n";
else{
auto fun=qry(1,1,n-1,l,r-1);
if(fun.fi>fun.se) cout << "-1\n";
else cout << fun.fi << '\n';
}
}
//flow(1,1,n-1);
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);
//int t;cin >> t;while(t--){solve();/*cout << endl;*/}
solve();
}