/*
ID:billat11
LANG:C
TASK:namenum
*/
#include<iostream>
#include<cstdio>
#include<cstdarg>
#include<stdlib.h>
#include<cstring>
#include<cmath>
using namespace std;
const int N=200005;
struct Node
{
int left;
int right;
int maxScore;
int score;
}allNode[4*N];
int data[N+5];
inline int max(int a,int b){ //加了inline速度快了好多,orz~~~
return a>b?a:b;
}
void build(int l,int r,int n)
{
if(l==r)//leaf node
{
allNode[n].left=l;
allNode[n].right=r;
allNode[n].maxScore=allNode[n].score=data[l];
}
else//not leaf node
{
int mid=(l+r)>>1;
allNode[n].left=l;
allNode[n].right=r;
build(l,mid,2*n);
build(mid+1,r,2*n+1);
allNode[n].maxScore=max(allNode[2*n].maxScore,allNode[2*n+1].maxScore);
}
}
void print(int l,int r,int n)
{
if(l==r)
{
printf("left:%d right:%d max:%d\n",l,r,allNode[n].maxScore);
}
else
{
int mid=(l+r)>>1;
print(l,mid,2*n);
print(mid+1,r,2*n+1);
printf("left:%d right:%d max:%d\n",l,r,allNode[n].maxScore);
}
}
int query(int l,int r,int n)
{
int mid=(allNode[n].left+allNode[n].right)>>1;
if((allNode[n].left==l)&&(allNode[n].right==r))
return allNode[n].maxScore;
else
{
if((r<=mid)&&(l>=allNode[n].left))
return query(l,r,2*n);
else if((l>mid)&&(r<=allNode[n].right))
return query(l,r,2*n+1);
else if((l<=mid)&&(r>mid))
return max(query(l,mid,2*n),query(mid+1,r,2*n+1));
}
}
void update(int n,int d,int alln)
{
int mid=(allNode[alln].left+allNode[alln].right)>>1;
if((allNode[alln].left==n)&&(allNode[alln].right==n))
{
allNode[alln].maxScore=d;
int newn=alln>>1;
while(newn>=1)
{
allNode[newn].maxScore=max(allNode[2*newn].maxScore,allNode[2*newn+1].maxScore);
newn=newn>>1;
}
}
else
{
if(n<=mid)
update(n,d,2*alln);
else if(n>mid)
update(n,d,2*alln+1);
}
/*
if(allNode[alln].left==allNode[alln].right)
{
allNode[alln].maxScore=d;
}
else
{
if(n<=mid)
update(n,d,2*alln);
else if(n>mid)
update(n,d,2*alln+1);
allNode[alln].maxScore=max(allNode[2*alln].maxScore,allNode[2*alln+1].maxScore);
}
* */
}
int main()
{
int n,m;
char op;
while(scanf("%d %d",&n,&m)==2)
{
for(int i=1;i<=n;i++)
scanf("%d",&data[i]);
build(1,n,1);
//print(1,n,1);
for(int i=1;i<=m;i++)
{
int l,r;
scanf("\n%c%d%d",&op,&l,&r);
if(op=='Q')
{
int ans=query(l,r,1);
printf("%d\n",ans);
}
else if(op=='U')
{
update(l,r,1);
}
}
}
//system("pause");
return 0;
}