记录
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define pb push_back
using namespace std;
int n,m;
int ma[800005],a[200005];
int read(){
int x=0;
char ch=getchar();
while(ch<'0' or ch>'9'){
if(ch=='U'){
return 1;
}
else if(ch=='Q'){
return 0;
}
ch=getchar();
}
while(ch>='0' and ch<='9'){
x=x*10+(ch-'0');
ch=getchar();
}
return x;
}
void build(int i,int l,int r){
if(l==r){
ma[i]=a[l];
return;
}
int mid=l+r>>1;
build(i<<1,l,mid);
build(i<<1|1,mid+1,r);
ma[i]=max(ma[i<<1],ma[i<<1|1]);
}
void modify(int i,int l,int r,int k,int x){
if(l==r){
ma[i]=max(ma[i],x);
return;
}
int mid=l+r>>1;
if(k<=mid){
modify(i<<1,l,mid,k,x);
}
else{
modify(i<<1|1,mid+1,r,k,x);
}
ma[i]=max(ma[i<<1],ma[i<<1|1]);
}
int query(int i,int l,int r,int ql,int qr){
if(ql<=l and qr>=r){
return ma[i];
}
if(l==r){
return -1;
}
int ans=-1;
int mid=l+r>>1;
if(l<=mid){
ans=max(ans,query(i<<1,l,mid,ql,qr));
}
if(r>mid){
ans=max(ans,query(i<<1|1,mid+1,r,ql,qr));
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
a[i]=read();
}
build(1,1,n);
while(m--){
int op=read(),x=read(),y=read();
if(op){
modify(1,1,n,x,y);
}
else{
cout<<query(1,1,n,x,y)<<"\n";
}
}
return 0;
}