#include <iostream>
using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
ll t[N << 2];
ll n, m, a[N], x, y;
char opt;
ll read(){ll x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;}
void print(ll x){if(x<0)putchar('-'),x=-x;if(x>9)print(x/10);putchar(x%10+48);}
char gc(){char c=getchar();while(c==' '||c=='\n')c=getchar();return c;}
void pushup(int u){
t[u] = max(t[u << 1], t[u << 1 | 1]);
}
void build(int u,int l,int r){
if(l == r){
t[u] = a[l];
return;
}
int mid = l + r >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
pushup(u);
}
void upd(int u, int l, int r, int x, ll val){
if(l == r){
t[u] = max(t[u], val);
return;
}
int mid = l + r >> 1;
if(x <= mid){
upd(u << 1, l, mid, x, val);
} else {
upd(u << 1 | 1, mid + 1, r, x, val);
}
pushup(u);
}
ll query(int u, int l, int r, int L, int R){
if(L <= l && r <= R){
return t[u];
}
int mid = l + r >> 1;
ll cnt = 0;
if(L <= mid) cnt = max(cnt, query(u << 1, l, mid, L, R));
if(mid < R) cnt = max(cnt, query(u << 1 | 1, mid + 1, r, L, R));
return cnt;
}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
a[i] = read();
}
build(1, 1, n);
while(m--){
opt = gc(), x = read(), y = read();
if(opt == 'U'){
upd(1, 1, n, x, y);
} else {
print(query(1, 1, n, x, y));
puts("");
}
}
return 0;
}