rt
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
int n,m,s,l,i,j,f[10000000],x,y;
char kind;
struct tree
{
int l,r,ma;
}a[10000000];
void build(int l,int r,int p)
{
a[p].l=l;
a[p].r=r;
if(l==r)
{
a[p].ma=f[l];
return ;
}
int mid=(l+r)/2;
build(l,mid,p*2);
build(mid+1,r,p*2+1);
a[p].ma=max(a[p*2].ma,a[p*2+1].ma);
return ;
}
void change(int x,int d,int p)
{
if(a[p].l==a[p].r)
{
a[p].ma=d;
return ;
}
int mid=(a[p].l+a[p].r)/2;
if(x<=mid)
change(x,d,p*2);
else
change(x,d,p*2+1);
a[p].ma=max(a[p*2].ma,a[p*2+1].ma);
return ;
}
int ask(int l,int r,int p)
{
if(l<=a[p].l&&a[p].r<=r)
return a[p].ma;
int mid=(a[p].l+a[p].r/2),ans=-1;
if(l<=mid)
ans=max(ans,ask(l,r,p*2));
if(mid+1<=r)
ans=max(ans,ask(l,r,p*2+1));
return ans;
}
signed main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&f[i]);
build(1,n,1);
for(i=1;i<=m;i++)
{
cin>>kind;
scanf("%d%d",&x,&y);
if(kind=='Q')
printf("%d\n",ask(x,y,1));
else
{
if(f[x]<y)
{
f[x]=y;
change(x,y,1);
}
}
}
}