#include <bits/stdc++.h>
using namespace std;
const int N = 2 * 1e5 + 5;
int n, m, a[N], d[4 * N], b[4 * N], v[4 * N];
void build(int s, int t, int p) {
if (s == t) {
d[p] = a[s];
return;
}
int m = s + ((t - s) >> 1);
build(s, m, p * 2);
build(m + 1, t, p * 2 + 1);
d[p] = max(d[p * 2], d[p * 2 + 1]);
}
void update(int l, int r, int c, int s, int t, int p) {
if (l <= s && t <= r) {
d[p] = c * (t - s + 1), b[p] = c;
return;
}
int m = s + ((t - s) >> 1);
if (v[p]) {
d[p * 2] = b[p] * (m - s + 1), d[p * 2 + 1] = b[p] * (t - m);
b[p * 2] = b[p * 2 + 1] = b[p];
v[p * 2] = v[p * 2 + 1] = 1;
v[p] = 0;
}
if (l <= m) update(l, r, c, s, m, p * 2);
if (r > m) update(l, r, c, m + 1, t, p * 2 + 1);
d[p] = max(d[p * 2], d[p * 2 + 1]);
}
int query(int l, int r, int s, int t, int p) {
if (l <= s && t <= r) return d[p];
int m = s + ((t - s) >> 1);
if (v[p]) {
d[p * 2] = b[p] * (m - s + 1), d[p * 2 + 1] = b[p] * (t - m);
b[p * 2] = b[p * 2 + 1] = b[p];
v[p * 2] = v[p * 2 + 1] = 1;
v[p] = 0;
}
int ans = 0;
if (l <= m) ans = query(l, r, s, m, p * 2);
if (r > m) ans = max(ans, query(l, r, m + 1, t, p * 2 + 1));
return ans;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, n, 1);
for (int i = 1; i <= m; i++) {
char opt;
int x,y;
cin >> opt >> x >> y;
if (opt == 'U') {
if (a[x] < a[y]) update(x, y, y, 1, n, 1);
}
else
cout << query(x, y, 1, n, 1) << '\n';
}
return 0;
}