#include <bits/stdc++.h>
#define N 200005
using namespace std;
int n,m;
int a[N];char ch;
int maxx[N<<2];
void push_up(int k){
maxx[k]=max(maxx[k<<1],maxx[k<<1|1]);
}
void build (int k,int l,int r){
if (l==r){
maxx[k]=a[l];
return;
}int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
push_up(k);
}
int query(int k,int l,int r,int L,int R){
if (L<=l&&r<=R) return maxx[k];
int mid=(l+r)>>1;int t1=0,t2=0;
if (L<=mid) t1=query(k<<1,l,mid,L,R);
if (R>mid) t2=query(k<<1|1,mid+1,r,L,R);
return max(t1,t2);
}
void change(int k,int l,int r,int x,int y){
if (l==r){
if (maxx[k]<y) maxx[k]=y;
return;
}int mid=(l+r)>>1;
if (x<=mid) change(k<<1,l,mid,x,y);
else change(k<<1|1,mid+1,r,x,y);
push_up(k);
}
int main(){
scanf("%d%d",&n,&m);
for (int i=0;i<=n;i++){
scanf("%d",&a[i]);
}build (1,1,n);int l,r,x,y;
for (int i=1;i<=m;i++){
cin>>ch;
if (ch=='Q'){scanf("%d%d",&l,&r);
int temp=query(1,1,n,l,r);
printf("%d\n",temp);
}else(ch=='U'){scanf("%d%d",&x,&y);
change(1,1,n,x,y);
}
}
}