#include <bits/stdc++.h>
#define vct vector
typedef long long ll;
using namespace std;
const int N = 1e6 + 10;
int a[N];
int b[N];
int st[(int)2e3 + 10];
int ed[(int)2e3 + 10];
int mk[(int)2e3 + 10];
int bel[N];
int n;
bool cmp(int x, int y) {
return x < y;
}
void Sort(int l, int r, int k) {
for (int i = l; i <= r; i ++) b[i] += k;
for (int i = l; i <= r; i ++) a[i] = b[i];
int x = bel[l];
sort(a + st[x], a + ed[x] + 1, cmp);
}
void update(int l, int r, int k) {
if (bel[l] == bel[r]) Sort(l, r, k);
else {
Sort(l, ed[bel[l]], k);
Sort(st[bel[r]], r, k);
for (int i = bel[l] + 1; i <= bel[r] - 1; i ++) mk[i] += k;
}
}
int query(int l, int r, int k) {
int res = 0;
if (bel[l] == bel[r]) {
for (int i = l; i <= r; i ++) if (b[i] + mk[bel[i]] >= k) res ++;
return res;
}
for (int i = l; i <= ed[bel[l]]; i ++) if (b[i] + mk[bel[i]] >= k) res ++;
for (int i = st[bel[r]]; i <= r; i ++) if (b[i] + mk[bel[i]] >= k) res ++;
for (int i = bel[l] + 1; i <= bel[r] - 1; i ++) {
int lft = st[i], rit = ed[i];
while (lft < rit) {
int m = (lft + rit) >> 1;
if (a[m] + mk[i] < k) lft = m + 1;
else rit = m;
}
res += ed[i] - lft + 1;
}
return res;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
int T;
cin >> T;
for (int i = 1; i <= n; i ++) cin >> a[i];
for (int i = 1; i <= n; i ++) b[i] = a[i];
int sq = sqrt(n);
for (int i = 1; i <= sq; i ++) {
st[i] = sq * (i - 1) + 1;
ed[i] = sq * i;
}
ed[sq] = n;
for (int i = 1; i <= sq; i ++) sort(a + st[i], a + ed[i] + 1, cmp);
for (int i = 1; i <= sq; i ++) {
for (int j = st[i]; j <= ed[i]; j ++) {
bel[j] = i;
}
}
while (T --) {
char op;
cin >> op;
int l, r, c;
cin >> l >> r >> c;
if (op == 'M') {
update(l, r, c);
} else {
cout << query(l, r, c) << '\n';
}
}
return 0;
}