#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001LL using P = pair; P op(P a,P b){ if(a>n>>q; vector a(n); rep(i,n)scanf("%d",&a[i]); vector ts(q),ls(q),rs(q); rep(i,q){ scanf("%d %d %d",&ts[i],&ls[i],&rs[i]); ls[i]--; } segtree seg(n-1); rep(i,n-1){ seg.set(i,P(min(a[i],a[i+1]),-Inf32)); } rep(_,q){ int t = ts[_]; int l = ls[_],r = rs[_]; if(t==1){ a[l] = r; for(int j=l-1;j<=l;j++){ if(j<0 || j==n-1)continue; seg.set(j,P(min(a[j],a[j+1]),-Inf32)); } } else{ int ans = Inf32; ans = min(ans,seg.prod(l,r-1).second); if(r-l==1)ans = a[l]; else{ ans = max(ans,min(a[l],a[l+1])); ans = max(ans,min(a[r-1],a[r-2])); ans = max(ans,min(a[l],a[r-1])); ans = max(ans,min(a[l],seg.prod(l+1,r-1).first)); ans = max(ans,min(a[r-1],seg.prod(l,r-2).first)); } cout<