#include <cstdio>
#include <iostream>
using namespace std;
const int N=2e5+2;
int n,m,a[N],tree[2*N];
inline void build(int l,int r,int x){
if(l==r){
tree[x]=a[l];
return ;
}
int mid=(l+r)>>1;
build(l,mid,x+1);
build(mid+1,r,x+((mid-l+1)<<1));
tree[x]=max(tree[x+1],tree[x+((mid-l+1)<<1)]);
}
inline int find(int l,int r,int x,int y,int k){
if(x<=l&&r<=y)
return tree[k];
if(l>=r)
return 0;
int mid=(l+r)>>1;
return max(find(l,mid,x,y,k+1),find(mid+1,r,x,y,k+((mid-l+1)<<1)));
}
inline void change(int l,int r,int p,int k){
if(l==r){
tree[k]=a[p];
return ;
}
int mid=(l+r)>>1;
if(p<=mid)
change(l,mid,p,k+1);
if(p>mid)
change(mid+1,r,p,k+((mid-l+1)<<1));
tree[k]=max(tree[k+1],tree[k+((mid-l+1)<<1)]);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,n,1);
for(int i=1;i<=m;i++){
char c;
int x,y;
cin>>c>>x>>y;
if(c=='Q')
printf("%d\n",find(1,n,x,y,1));
else {
if(a[x]<y)
a[x]=y,change(1,n,x,1);
}
}
return 0;
}