#include <bits/stdc++.h>
using namespace std;
int n, m;
struct FenwickTree {
int N;
vector<int> fw;
void update(int x, int v) {
while (x <= N) fw[x] += v, x += x & -x;
}
void range_update(int l, int r, int v) {
if (r < l) return;
update(l, v);
update(r+1, -v);
}
int query(int x) {
int res = 0;
while (x > 0) res += fw[x], x -= x & -x;
return res;
}
int low(int x) {
int l = 1, r = n+1;
while (l < r) {
int mid = (l + r) / 2;
if (query(mid) >= x) r = mid;
else l = mid + 1;
}
return l;
}
int high(int x) {
int l = 0, r = n;
while (l < r) {
int mid = (l + r + 1) / 2;
if (query(mid) <= x) l = mid;
else r = mid - 1;
}
return l;
}
} T;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
T.N = n, T.fw.resize(n+1);
vector<int> a(n+1);
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a.begin() + 1, a.end());
for (int i = 1; i <= n; i++) T.range_update(i, i, a[i]);
while (m--) {
char t; cin >> t;
if (t == 'F') {
int c, h;
cin >> c >> h;
int l = T.low(h), r = min(n, l + c - 1);
if (r < l) continue;
int x = T.query(r), id = T.low(x+1);
if (id <= n && T.query(id) == x+1) {
int ll = T.low(x);
int rr = T.high(x);
T.range_update(l, ll-1, 1);
T.range_update(rr - r + ll, rr, 1);
} else T.range_update(l, r, 1);
} else {
int l, r;
cin >> l >> r;
int ll = T.low(l), rr = T.high(r);
cout << max(0, rr - ll + 1) << '\n';
}
}
}