#include<bits/stdc++.h>
#define ls d<<1
#define rs d<<1+1
using namespace std;
const int N = 200010;
int a,b,n,m,s[N];
char f;
struct tree
{
int l,r,m;
}v[N * 4];
inline void read(int &x)
{
x = 0;
int f = 1;
char s = getchar();
while(s < '0' || s > '9')
{
if(s == '-') f = -1;
s = getchar();
}
while(s >= '0' && s <= '9')
{
x = x * 10 + s - 48;
s = getchar();
}
x *= f;
return;
}
void write(int x)
{
if(x < 0)
{
x = -1;
putchar('-');
}
if(x > 9) write(x / 10);
putchar(x % 10 + 48);
return;
}
void build(int l,int r,int d)
{
v[d].l = l,v[d].r = r;
if(l == r)
{
v[d].m = s[l];
return;
}
int mid = (l + r - 1) >> 1;
build(l,mid,ls);
build(mid + 1,r,rs);
v[d].m = max(v[ls].m,v[rs].m);
return;
}
int find(int d)
{
if(v[d].r < a || v[d].l > b) return 0;
if(v[d].l >= a && v[d].r <= b) return v[d].m;
int mid = (v[d].l + v[d].r) >> 1;
int res = 0;
res = find(ls);
res = max(res,find(rs));
return res;
}
void change(int d)
{
if(v[d].r < a || v[d].l > a) return;
v[d].m = max(v[d].m,b);
change(ls);
change(rs);
return;
}
int main()
{
read(n),read(m);
for(int i = 1;i <= n;i ++) read(s[i]);
build(1,n,1);
while(m --)
{
f = getchar();
while(f != 'U' && f != 'Q') f = getchar();
read(a),read(b);
switch(f)
{
case 'Q':
write(find(1));
putchar('\n');
break;
case 'U':
if(s[a] < b) change(1);
break;
}
}
return 0;
}