#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int inf = 2e9;
int a[N];
struct {
int t[4 * N], lazy[4 * N];
void build(int v, int tl, int tr) {
if (tl == tr) {
t[v] = a[tl];
return;
}
int tm = (tl + tr) >> 1;
build(v << 1, tl, tm);
build(v << 1 | 1, tm + 1, tr);
t[v] = max(t[v << 1], t[v << 1 | 1]);
}
void push(int v) {
if (!lazy[v]) return;
int x = lazy[v];
t[v << 1] += x;
t[v << 1 | 1] += x;
lazy[v << 1] += x;
lazy[v << 1 | 1] += x;
lazy[v] = 0;
}
int in(int v, int tl, int tr, int l) {
if (tl == tr) {
return t[v];
}
int tm = (tl + tr) >> 1;
push(v);
if (l <= tm) {
return in(v << 1, tl, tm, l);
} else {
return in(v << 1 | 1, tm + 1, tr, l);
}
}
void update(int v, int tl, int tr, int l, int r) {
if (l > r) return;
if (tl == l && tr == r) {
++t[v], ++lazy[v];
return;
}
int tm = (tl + tr) >> 1;
push(v);
update(v << 1, tl, tm, l, min(tm, r));
update(v << 1 | 1, tm + 1, tr, max(tm + 1, l), r);
t[v] = max(t[v << 1], t[v << 1 | 1]);
}
pair<int, int> get(int v, int tl, int tr, int x) {
if (tl == tr) {
return {tl, t[v]};
}
int tm = (tl + tr) >> 1;
push(v);
if (t[v << 1] > x) {
return get(v << 1, tl, tm, x);
} else {
return get(v << 1 | 1, tm + 1, tr, x);
}
}
} T;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
a[n + 1] = inf;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
T.build(1, 1, n + 1);
for (int i = 0; i < q; ++i) {
char t; int l, r;
cin >> t >> l >> r;
if (t == 'F') {
pair<int, int> gl = T.get(1, 1, n + 1, r - 1);
int ql = gl.first, qr = ql + l - 1;
if (qr > n) {
T.update(1, 1, n + 1, ql, n);
} else {
int val = T.in(1, 1, n + 1, qr);
int tl = T.get(1, 1, n + 1, val - 1).first;
int tr = T.get(1, 1, n + 1, val).first - 1;
int st = l;
if (ql <= tl - 1) {
st -= ql - tl + 2;
T.update(1, 1, n + 1, ql, tl - 1);
}
if (st) {
tl = tr - st + 1;
T.update(1, 1, n + 1, tl, tr);
}
}
} else {
cout << T.get(1, 1, n + 1, r).first - T.get(1, 1, n + 1, l - 1).first << "\n";
}
}
return 0;
}