#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<math.h>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N=1000100;
const int MAX=151;
const int MOD=1000007;
const int MOD1=100000007;
const int MOD2=100000009;
const int INF=1000000000;
const double EPS=0.00000001;
typedef long long ll;
typedef unsigned long long ull;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
char s[5];
int n,clo,a[N],b[N],d[1010],f[N];
int gethalf(int i,int c) {
int l=(i-1)*clo,r=i*clo+1,mid=(l+r)/2;
while (l+1<r)
if (b[mid]+d[i]>=c) {
r=mid;mid=(l+r)/2;
} else {
l=mid;mid=(l+r)/2;
}
return i*clo-l;
}
int get(int l,int r,int c) {
int i,ret=0,clol=f[l],clor=f[r];
if (clol==clor) {
for (i=l;i<=r;i++)
if (a[i]+d[clol]>=c) ret++;
} else {
for (i=l;i<=clol*clo;i++)
if (a[i]+d[clol]>=c) ret++;
for (i=(clor-1)*clo+1;i<=r;i++)
if (a[i]+d[clor]>=c) ret++;
for (i=clol+1;i<clor;i++) ret+=gethalf(i,c);
}
return ret;
}
void change(int l,int r,int c) {
int i,clol=f[l],clor=f[r];
if (clol==clor) {
for (i=l;i<=r;i++) a[i]+=c;
for (i=(clol-1)*clo+1;i<=clol*clo&&i<=n;i++) b[i]=a[i];
if (clol==clo+1) sort(b+(clol-1)*clo+1,b+n+1);
else sort(b+(clol-1)*clo+1,b+clol*clo+1);
} else {
for (i=l;i<=clol*clo;i++) a[i]+=c;
for (i=(clol-1)*clo+1;i<=clol*clo;i++) b[i]=a[i];
sort(b+(clol-1)*clo+1,b+clol*clo+1);
for (i=(clor-1)*clo+1;i<=r;i++) a[i]+=c;
for (i=(clor-1)*clo+1;i<=clor*clo&&i<=n;i++) b[i]=a[i];
if (clor==clo+1) sort(b+(clor-1)*clo+1,b+n+1);
else sort(b+(clor-1)*clo+1,b+clor*clo+1);
for (i=clol+1;i<clor;i++) d[i]+=c;
}
}
int main()
{
//freopen("magic.in","r",stdin);
//freopen("magic.out","w",stdout);
int i,j,q,l,r,c;
scanf("%d%d", &n, &q);
for (i=1;i<=n;i++) {
scanf("%d", &a[i]);b[i]=a[i];
}
clo=(int)sqrt(n);
memset(d,0,sizeof(d));
for (i=1;i<=clo;i++) {
sort(b+(i-1)*clo+1,b+i*clo+1);
for (j=(i-1)*clo+1;j<=i*clo;j++) f[j]=i;
}
sort(b+clo*clo+1,b+n+1);
for (j=clo*clo+1;j<=n;j++) f[j]=clo+1;
while (q--) {
scanf("%s%d%d%d", s, &l, &r, &c);
if (s[0]=='A') printf("%d\n", get(l,r,c));
else change(l,r,c);
}
return 0;
}