#include<iostream>
#include<cstdio>
#include<cstring>
#define MMAX 200003
using namespace std;
int Q[4*MMAX];
int N,F,ql,qr,p,v;
void update(int r,int L,int R){
int M=(L+R)/2;
if(L==R) Q[r]=v;
else {
if(p<=M) update(r*2,L,M);else update(r*2+1,M+1,R);
Q[r]=max(Q[r*2],Q[r*2+1]);
}
}///更新线段树
int query(int r,int L,int R){
int ans=-1;
int M=(L+R)/2;
if(ql<=L&&R<=qr) return Q[r];
if(qr<=M) return query(r*2,L,M);
else if(ql>M) return query(r*2+1,M+1,R);
else {
ans=max(query(r*2,L,M),query(r*2+1,M+1,R));
}
return ans;
}///进行区间查询
int main(){
while(~scanf("%d%d",&N,&F)){
for(int i=0;i<N;i++){
scanf("%d",&v);
p=i+1;
update(1,1,N);
}///相当于建树
for(int i=0;i<F;i++){
char op[5];
int a,b;
scanf("%s %d %d",op,&a,&b);
if(op[0]=='Q'){
ql=a,qr=b;
printf("%d\n",query(1,1,N));}
else {
p=a,v=b;///P是插入的位置,v是插入的数
update(1,1,N);
}
}
}
return 0;
}