//单点替换
#include <iostream>#include <cstdio>using namespace std;const int maxn = 100005;int big[maxn*4];void build(int l,int r,int rt){ if(l == r) { scanf("%d",&big[rt]); return ; } int mid = (l+r)>>1; build(l,mid,rt*2); build(mid+1,r,rt*2+1); big[rt] = max(big[rt*2],big[rt*2+1]);}void update(int p,int v,int l,int r,int rt){ if(l==r) { big[rt] = v; return; } int mid = (l+r)>>1; if(p<=mid) update(p,v,l,mid,rt*2); else update(p,v,mid+1,r,rt*2+1); big[rt]=max(big[rt*2],big[rt*2+1]);}int query(int b,int e,int l,int r,int rt){ if(b > r || e < l) return -1; if(b <= l && r<=e) { return big[rt]; } int mid = (l+r)>>1; int ans = 0; if(b <= mid) ans = max(ans,query(b,e,l,mid,rt*2)); if(e > mid) ans = max(ans,query(b,e,mid+1,r,rt*2+1)); return ans;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { int a,b,e; scanf("%d%d%d",&a,&b,&e); if(a) update(b,e,1,n,1); else printf("%d\n",query(b,e,1,n,1)); } } return 0;}
//区间更新
0 0