#include<bits/stdc++.h>
#define lson rt<<1
#define rson ((rt<<1)|1)
#define mid ((l+r)>>1)
#define MAXN 200010
using namespace std;
int n,q;
int a[MAXN];
int seg[MAXN<<2];
void update(int rt){
seg[rt]=max(seg[lson],seg[rson]);
}
void build(int l,int r,int rt){
if(l==r){
seg[rt]=a[l];return ;
}
build(l,mid,lson);
build(mid+1,r,rson);
update(rt);
}
void modify(int l,int r,int rt,int xb,int x){
if(l==r){
if(seg[rt]<x) seg[rt]=x;
return ;
}
if(xb<=mid) modify(l,mid,lson,xb,x);
else modify(mid+1,r,rson,xb,x);
update(rt);
}
int query(int l,int r,int rt,int lp,int rp){
if(lp<=l && r<=rp){
return seg[rt];
}
int ans=-1e9-7;
if(lp<=mid) ans=max(ans,query(l,mid,lson,lp,rp));
else if(rp>mid) ans=max(ans,query(mid+1,r,rson,lp,rp));
return ans;
}
int main(){
cin >> n >> q;
for(int i=1;i<=n;i++) cin >> a[i];
build(1,n,1);
while(q--){
int l,r;
char op;
cin >> op >> l >> r;
if(op=='Q') cout << query(1,n,1,l,r) << endl;
else modify(1,n,1,l,r);
}
return 0;
}