#include <bits/stdc++.h>
#define il inline
using namespace std;
bool Beg;
namespace Zctf1088 {
namespace IO {
const int bufsz = 1 << 20;
char ibuf[bufsz], *p1 = ibuf, *p2 = ibuf;
#define getchar() (p1 == p2 && (p2 = (p1 = ibuf) + fread(ibuf, 1, bufsz, stdin), p1 == p2) ? EOF : *p1++)
il int read() {
int x = 0; char ch = getchar(); bool t = 0;
while (ch < '0' || ch > '9') {t ^= ch == '-'; ch = getchar();}
while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar();}
return t ? -x : x;
}
char obuf[bufsz], *p3 = obuf, stk[50];
#define flush() (fwrite(obuf, 1, p3 - obuf, stdout), p3 = obuf)
#define putchar(ch) (p3 == obuf + bufsz && flush(), *p3++ = (ch))
il void write(int x, bool t = 0) {
int top = 0;
x < 0 ? putchar('-'), x = -x : 0;
do {stk[++top] = x % 10 | 48; x /= 10;} while(x);
while (top) putchar(stk[top--]);
t ? putchar(' ') : putchar('\n');
}
struct FL {
// ~FL() {flush();}
} fl;
}
using IO::read; using IO::write;
const int N = 3e5 + 10;
int n, qq, a[N];
struct node {
int op, l, r, k, id, val;
} q[N], q1[N], q2[N];
int ans[N];
namespace BIT {
int c[N];
il void update(int x, int v) {
for (int i = x; i <= n; i += (i & -i))
c[i] += v;
}
il int query(int x) {
int res = 0;
for (int i = x; i; i -= (i & -i))
res += c[i];
return res;
}
il int query(int l, int r) {
return query(r) - query(l - 1);
}
}
il void solve(int l, int r, int L, int R) {
if (l > r) return;
if (L == R) {
for (int i = l; i <= r; i++)
if (q[i].op == 2) ans[q[i].id] = L;
return;
}
int mid = (L + R) >> 1;
int tot1 = 0, tot2 = 0;
for (int i = l; i <= r; i++) {
if (q[i].op == 1) {
if (q[i].k <= mid) {
BIT::update(q[i].id, q[i].val);
q1[++tot1] = q[i];
} else q2[++tot2] = q[i];
} else {
int x = BIT::query(q[i].l, q[i].r);
if (q[i].k <= x) q1[++tot1] = q[i];
else {
q[i].k -= x;
q2[++tot2] = q[i];
}
}
}
for (int i = 1; i <= tot1; i++)
if (q1[i].op == 1) BIT::update(q1[i].id, - q1[i].val);
for (int i = 1; i <= tot1; i++) q[l + i - 1] = q1[i];
for (int i = 1; i <= tot2; i++) q[l + tot1 + i - 1] = q2[i];
solve(l, l + tot1 - 1, L, mid);
solve(l + tot1, r, mid + 1, R);
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0), cout.tie(0);
cin >> n >> qq;
for (int i = 1; i <= n; i++) cin >> a[i];
int tot = 0;
for (int i = 1; i <= n; i++)
q[++tot] = {1, 0, 0, a[i], i, 1};
int tim = 0;
for (int i = 1; i <= qq; i++) {
string s; cin >> s;
if (s == "C") {
int x, v; cin >> x >> v;
q[++tot] = {1, 0, 0, a[x], x, -1};
q[++tot] = {1, 0, 0, v, x, 1};
a[x] = v;
} else {
int l, r, k; cin >> l >> r >> k;
q[++tot] = {2, l, r, k, ++tim, 0};
}
}
solve(1, tot, 0, 1e9);
for (int i = 1; i <= tim; i++)
cout << ans[i] << "\n";
return 0;
}}
bool End;
il void Usd() {cerr << "\nUse: " << (&Beg - &End) / 1024.0 / 1024.0 << "MB " << (double)clock() * 1000.0 / CLOCKS_PER_SEC << "ms\n";}
signed main() {
Zctf1088::main();
Usd();
return 0;
}