#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5,M=1e3+5,Inf=-1e9;
struct blk {
int a[M*2];
int l,r,tag;
} p[M],pp[M];
int n,q,l,r,x,su;
int h[N];
char opt;
void upd(int pos) {
pp[pos]=p[pos];
sort(pp[pos].a+1,pp[pos].a+M+1);
}
int main() {
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>h[i];
su=(n+M-1)/M;
for(int i=1;i<=su;i++) {
if(i!=su) {
p[i].l=M*(i-1)+1;
p[i].r=M*i;
for(int j=p[i].l;j<=p[i].r;j++) p[i].a[j-p[i].l+1]=h[j];
} else {
p[i].l=M*(i-1)+1;
p[i].r=n;
for(int j=p[i].l;j<=p[i].r;j++) p[i].a[j-p[i].l+1]=h[j];
for(int j=n+1;j<=M*i;j++) p[i].a[j-p[i].l+1]=Inf;
}
upd(i);
}
while(q--) {
cin>>opt>>l>>r>>x;
if(opt=='M') {
for(int i=(l-1)/M+1;i<=su;i++) {
if(p[i].l>r) break;
if(p[i].l>=l&&p[i].r<=r) p[i].tag+=x;
else if(l>=p[i].l&&r<=p[i].r) {
for(int j=l;j<=r;j++) p[i].a[j-p[i].l+1]+=x;
upd(i);
}
else if((r>=p[i].l&&l<=p[i].l)||(l<=p[i].r&&r>=p[i].r)) {
for(int j=max(l,p[i].l);j<=min(r,p[i].r);j++) p[i].a[j-p[i].l+1]+=x;
upd(i);
}
}
} else {
int ans=0;
for(int i=(l-1)/M+1;i<=su;i++) {
int lim=x-p[i].tag;
if(p[i].l>r) break;
if(p[i].l>=l&&p[i].r<=r) {
int l=1,r=M,mid,res=M;
while(l<=r) {
int mid=(l+r)/2;
if(pp[i].a[mid]>=lim) r=mid-1;
else res=mid,l=mid+1;
}
ans+=M-res;
}
else if(l>=p[i].l&&r<=p[i].r) {
for(int j=l;j<=r;j++) ans+=(p[i].a[j-p[i].l+1]>=lim);
}
else if((r>=p[i].l&&l<=p[i].l)||(l<=p[i].r&&r>=p[i].r)) {
for(int j=max(l,p[i].l);j<=min(r,p[i].r);j++) ans+=(p[i].a[j-p[i].l+1]>=lim);
}
}
cout<<ans<<endl;
}
}
}