#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
const int N=2e5+5;
struct node{
int l,r,sum;
}tr[N<<2];
int a[N];
void build(int l,int r,int i){
tr[i].l=l,tr[i].r=r;
if(l==r){
tr[i].sum=a[i];
return;
}
int mid=(l+r)>>1;
build(l,mid,i<<1);
build(mid+1,r,i<<1|1);
tr[i].sum=max(tr[i<<1].sum,tr[i<<1|1].sum);
}
void add(int x,int k,int i){
if(tr[i].l==tr[i].r and tr[i].l==x){
if(tr[i].sum<k)tr[i].sum=k;
return;
}
if(tr[i<<1].r>=x) add(x,k,i<<1);
else add(x,k,i<<1|1);
tr[i].sum=max(tr[i<<1].sum,tr[i<<1|1].sum);
return;
}
int ask(int l,int r,int i){
if(tr[i].l>=l and tr[i].r<=r) return tr[i].sum;
if(tr[i].l>r or tr[i].r<l) return -1;
int s=-1;
if(tr[i<<1].r>=l) s=max(s,ask(l,r,i<<1));
if(tr[i<<1|1].l<=r) s=max(s,ask(l,r,i<<1|1));
return s;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
build(1,n,1);
while(m--){
char op;
int a,b;
cin>>op>>a>>b;
if(op=='Q')
cout<<ask(a,b,1)<<'\n';
else
add(a,b,1);
}
return 0;
}