#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
return x*f;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
const int maxn=1e6+5;
int n,m,num,len;
int a[maxn],tag[maxn],loc[maxn],l[maxn],r[maxn];
vector<int> tmp[1001];
inline void reset(int pos){
tmp[pos].clear();
for(int i=l[pos];i<=r[pos];i++) tmp[pos].push_back(a[i]);
sort(tmp[pos].begin(),tmp[pos].end());
}
inline void update(int x,int y,int k){
if(loc[x]==loc[y]){
for(int i=x;i<=y;i++) a[i]+=k;
reset(loc[x]);
return;
}
for(int i=x;i<=r[loc[x]];i++) a[i]+=k;
reset(loc[x]);
for(int i=l[loc[y]];i<=y;i++) a[i]+=k;
reset(loc[y]);
for(int i=loc[x]+1;i<loc[y];i++) tag[i]+=k;
}
inline int query(int x,int y,int k){
int ans=0;
if(loc[x]==loc[y]){
for(int i=x;i<=y;i++) if(a[i]+tag[loc[i]]>=k) ans++;
return ans;
}
for(int i=x;i<=r[loc[x]];i++) if(a[i]+tag[loc[i]]>=k) ans++;
for(int i=l[loc[y]];i<=y;i++) if(a[i]+tag[loc[i]]>=k) ans++;
for(int i=loc[x]+1;i<loc[y];i++) ans+=lower_bound(tmp[i].begin(),tmp[i].end(),k-tag[i])-tmp[i].begin();
return ans;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++) a[i]=read();
len=sqrt(n),num=n/len;
if(n%len) num++;
for(int i=1;i<=num;i++) l[i]=(i-1)*len+1,r[i]=i*len,tag[i]=0,reset(i);
for(int i=1;i<=m;i++){
char op;
int x,y,k;
cin>>op,x=read(),y=read(),k=read();
if(op=='M') update(x,y,k);
else cout<<query(x,y,k)<<endl;
}
return 0;
}