#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1;
bool opt[N];
int n, m, cl, cr, cnt, tot, L[30], R[30], x[N], y[N], k[N], b[N << 1], a[N];
int root[N], tr[N * 300], ls[N * 300], rs[N * 300];
int lowbit(int x) {return x & -x;}
int getid(int x) {return lower_bound(b + 1, b + 1 + cnt, x) - b;}
int mod(int las, int lt, int rt, int x, int val) {
int cur = ++ tot;
tr[cur] = tr[las] + val;
ls[cur] = ls[las]; rs[cur] = rs[las];
if (lt == rt) return cur;
int mid = lt + rt >> 1;
if (x <= mid) ls[cur] = mod(ls[las], lt, mid, x, val);
else rs[cur] = mod(rs[las], mid + 1, rt, x, val);
return cur;
}
void add(int cur, int x, int val) {
for ( ; cur <= n; cur += lowbit(cur))
root[cur] = mod(root[cur], 1, cnt, x, val);
}
int query(int lt, int rt, int k) {
if (lt == rt) {
int res = 0;
for (int i = 1; i <= cr; i++) res += tr[R[i]];
for (int i = 1; i <= cl; i++) res -= tr[L[i]];
return res;
}
int mid = lt + rt >> 1;
if (k <= mid) {
for (int i = 1; i <= cl; i++) L[i] = ls[L[i]];
for (int i = 1; i <= cr; i++) R[i] = ls[R[i]];
return query(lt, mid, k);
}
else {
for (int i = 1; i <= cl; i++) L[i] = rs[L[i]];
for (int i = 1; i <= cr; i++) R[i] = rs[R[i]];
return query(mid + 1, rt, k);
}
}
int main() {
cin.tie(0) -> sync_with_stdio(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
b[++ cnt] = a[i];
}
for (int i = 1; i <= m; i++) {
char tmp; cin >> tmp;
if (tmp == 'Q') {
cin >> x[i] >> y[i] >> k[i];
b[++ cnt] = k[i];
}
else {
opt[i] = true;
cin >> x[i] >> y[i];
b[++ cnt] = y[i];
}
}
sort(b + 1, b + 1 + cnt);
cnt = unique(b + 1, b + 1 + cnt) - b - 1;
for (int i = 1; i <= n; i++)
add(i, getid(a[i]), 1);
for (int i = 1; i <= m; i++) {
if (opt[i]) {
add(x[i], getid(a[x[i]]), -1);
add(x[i], getid(y[i]), 1);
a[x[i]] = y[i];
}
else {
cl = cr = 0;
for (int j = x[i] - 1; j; j -= lowbit(j))
L[++ cl] = root[j];
for (int j = y[i]; j; j -= lowbit(j))
R[++ cr] = root[j];
cout << query(1, cnt, getid(k[i])) << "\n";
}
}
return 0;
}