#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include using namespace std; using namespace atcoder; using ll=long long; using mint=modint998244353; const ll inf=(1e9+7)*(1e9+7); int dx[4]={1,0,0,-1},dy[4]={0,1,-1,0}; const int mod=998244353; using P=pair; P op(P a,P b){ P c={0,0}; if(a.first>=b.first){ c.first=a.first; c.second=max(a.second,b.first); }else{ c.first=b.first; c.second=max(b.second,a.first); } return c; } P e(){ return{0,0}; } int main(){ int n,q; cin>>n>>q; vectora(n); for(int i=0;i>a[i]; vector

b(n-1); for(int i=0;iseg(b); int query,i,x,l,r; while(cin>>query){ if(query==1){ cin>>i>>x; i--; a[i]=x; if(i!=0) seg.set(i-1,{min(a[i-1],a[i]),0}); if(i!=n-1) seg.set(i,{min(a[i],a[i+1]),0}); } if(query==2){ cin>>l>>r; l--; if(r-l==1){ cout<1){ int mid=(ok+ng)/2; P p=seg.prod(l,r-1); int cnt=0; if(p.first>=mid) cnt++; if(p.second>=mid) cnt++; if(a[l]>=mid) cnt++; if(a[r-1]>=mid) cnt++; if(cnt>=2) ok=mid; else ng=mid; } cout<