#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1000010],sa[1000010],b[1000010],sq,tag[1000010],l[1000010],r[1000010],x,y,z;
char opt;
long long f(long long L,long long R,long long x)
{
long long ll=L,rr=R,mid;
if(sa[rr]+tag[b[R]]<x)
return 0;
if(sa[ll]+tag[b[L]]>=x)
return R-L+1;
while(ll<rr)
{
mid=(ll+rr)/2;
if(sa[mid]+tag[b[mid]]<x)
ll=mid+1;
else
rr=mid;
}
return R-mid;
}
void upt(long long id)
{
for(int i=l[id];i<=r[id];i++)
sa[i]=a[i];
sort(sa+l[id],sa+1+r[id]);
}
void add(long long x,long long y,long long z)
{
if(b[x]==b[y])
{
for(int i=x;i<=y;i++)
a[i]+=z;
upt(b[x]);
return ;
}
for(int i=x;i<=r[b[x]];i++)
a[i]+=z;
upt(b[x]);
for(int i=l[y];i<=y;i++)
a[i]+=z;
upt(b[y]);
for(int i=b[x]+1;i<=b[y]-1;i++)
tag[i]+=z;
}
void query(long long x,long long y,long long z)
{
long long ans=0;
if(b[x]==b[y])
{
for(int i=x;i<=y;i++)
if(a[i]+tag[b[i]]>=z)
ans++;
printf("%lld\n",ans);
return ;
}
for(int i=x;i<=r[b[x]];i++)
if(a[i]+tag[b[i]]>=z)
ans++;
for(int i=l[b[y]];i<=y;i++)
if(a[i]+tag[b[i]]>=z)
ans++;
for(int i=b[x]+1;i<=b[y]-1;i++)
ans+=f(l[i],r[i],z);
printf("%lld\n",ans);
}
#define QwQ return 0;
int main()
{
cin>>n>>m;
sq=sqrt(n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
{
l[i]=r[i-1]+1;
r[i]=min(sq*i,n);
for(int j=l[i];j<=r[i];j++)
b[j]=i,sa[j]=a[j];
if(r[i]==n)
break;
}
while(m--)
{
cin>>opt;
scanf("%lld%lld%lld",&x,&y,&z);
if(opt=='M')
add(x,y,z);
else
query(x,y,z);
}
QwQ;
}