#include <bits/stdc++.h>
#define MAXN 100005
using namespace std;
long long a[MAXN], L, C, R, b[MAXN];
int n, q;
struct segtrees
{
long long val;
// int lazy;
} segtree[MAXN << 2];
void pushup(int xb)
{
segtree[xb].val = segtree[xb << 1].val + segtree[xb << 1 | 1].val;
}
void build(int l, int r, int xb)
{
if (l == r)
{
segtree[xb].val = a[l];
return;
}
int m = l + r >> 1;
build(l, m, xb << 1);
build(m + 1, r, xb << 1 | 1);
pushup(xb);
}
void update(int l, int r, int xb)
{
if (l == r)
{
segtree[xb].val = C;
return;
}
int m = l + r >> 1;
if (m >= L)
update(l, m, xb << 1);
else
update(m + 1, r, xb << 1 | 1);
pushup(xb);
}
// long long query(int l, int r, int xb)
// {
// if (L <= l && r <= R)
// return segtree[xb].val;
// if (L > r || l > R)
// return 0;
// int m = l + r >> 1;
// return query(l, m, xb << 1) + query(m + 1, r, xb << 1 | 1);
// }
int query(int l, int r, int xb)
{
if (L <= l && r <= R && l == r)
{
return segtree[xb].val;
}
if (R < l || L > r)
return 0;
int m = r + l >> 1;
return max(query(l, m, xb << 1), query(m + 1, r, xb << 1 | 1));
}
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
while (~scanf("%d%d", &n, &q))
{
for (int i = 1; i <= n; i++)
{
scanf("%lld", &a[i]);
}
build(1, n, 1);
for (int i = 1; i <= q; i++)
{
char k;
getchar();
scanf("%c%lld%lld", &k, &L, &C);
if (k == 'U')
update(1, n, 1);
else if (k == 'Q')
R = C, printf("%lld\n", query(1, n, 1));
}
}
return 0;
}