#include<iostream>
#include<cstdio>
using namespace std;
#define int long long
#define maxn 9000050
#define pf printf
#define sc scanf
#define re register
struct node{
int l,r;
int big;
}e[maxn];
int number[maxn];
void updata(int k){
e[k].big=max(e[k*2].big,e[k*2+1].big);
}
void build(int k,int l,int r){
e[k].l=l;
e[k].r=r;
if(l==r){
e[k].big=number[l];
return;
}
int mid=(e[k].l+e[k].r)/2;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
updata(k);
}
int query(int k,int l,int r,int a,int b){
if(a<=l&&r<=b){
return e[k].big;
}
int mid=(e[k].l+e[k].r)/2;
int res=-9999999999999;
if(a<=mid){
res=max(res,query(k*2,l,mid,a,b));
}
if(b>mid){
res=max(res,query(k*2+1,mid+1,r,a,b));
}
return res;
}
void change(int k,int l,int r,int x,int w){
if(l==r&&l==x){
if(e[k].big<w){
e[k].big=w;
return;
}
}
int mid=(e[k].l+e[k].r)/2;
if(x<=mid){
change(k*2,l,mid,x,w);
}else{
change(k*2+1,mid+1,r,x,w);
}
updata(k);
}
signed main(){
freopen("P1531_2.in","r",stdin);
freopen("out.doc","w",stdout);
int n,m;
sc("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
sc("%lld",&number[i]);
}
build(1,1,n);
while(m--){
char opt;
cin>>opt;
if(opt=='Q'){
int a,b;
sc("%lld%lld",&a,&b);
cout<<query(1,1,n,a,b)<<endl;
}
if(opt=='U'){
int a,c;
sc("%lld%lld",&a,&c);
change(1,1,n,a,c);
}
}
return 0;
}
/*5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5*/