#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node
{
int c[8]={0};
}dp[400001];
int n,m,x,y;
node upd(node x,node y){
node k;
int l=0,r=0;
while(l+r<8 && l<8 && r<8)
{
if(x.c[l] > y.c[r])k.c[l+r] = x.c[l++];
else k.c[l+r] = y.c[r++];
}
return k;
}
void update(int l,int r,int s,int cc,int p){
if(l==r && l==s){
dp[p].c[0]=cc; return;
}
int mid=(l+r)/2;
if(mid >= s)update(l,mid,s,cc,p << 1);
else update(mid+1,r,s,cc,p << 1 | 1);
dp[p]=upd(dp[p << 1],dp[p << 1 | 1]);
return;
}
node query(int l,int r,int s,int t,int p){
if(l>=s && r<=t){
return dp[p];
}
int mid=(l+r)/2; node rt1,rt2;
if(mid>=s) rt1=query(l,mid,s,t,p << 1);
if(mid<t) rt2=query(mid+1,r,s,t,p << 1 | 1);
return upd(rt1,rt2);
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
char r; cin>>r;
if(r == 'C'){
scanf("%lld%lld",&x,&y);
update(1,n,x,y,1);
}
else
{
scanf("%lld%lld",&x,&y);
printf("%lld\n",query(1,n,x,y,1).c[7]);
}
}
return 0;
}