#include<bits/stdc++.h>
using namespace std;
int n,q;
char c;
struct node{
int h,id;
}a[1000005];
int sq,sqq;
int tag[1005],l[1005],r[1005];
int ql,qr,w;
bool cmp(node a,node b){
return a.h<b.h;
}
int main(){
cin>>n>>q;
sq=sqq=sqrt(n);
if(sq*sq<n)sqq++;
for(int i=1;i<=n;i++){
cin>>a[i].h;
a[i].id=i;
}
for(int i=1;i<=sqq;i++){
l[i]=i*sq-sq+1;
r[i]=min(n,sq*i);
sort(a+l[i],a+r[i]+1,cmp);
}
while(q--){
cin>>c;
cin>>ql>>qr>>w;
int ll=(ql-1)/sq+1,rr=(qr-1)/sq+1;
if(c=='A'){
int ans=0;
for(int i=l[ll];i<=r[ll];i++){
if(a[i].id>=ql&&a[i].id<=qr){
if(a[i].h+tag[ll]>=w)ans++;
}
}
if(ll!=rr){
for(int i=l[rr];i<=r[rr];i++){
if(a[i].id>=ql&&a[i].id<=qr){
if(a[i].h+tag[rr]>=w)ans++;
}
}
for(int i=ll+1;i<rr;i++){
int el=l[i],er=r[i],mid,ans2=0;
while(el<=er){
mid=(el+er)/2;
if(a[mid].h+tag[i]>=w){
ans2=mid;
er=mid-1;
}else{
el=mid+1;
}
}
if(ans2!=0)
ans+=r[i]-ans2+1;
}
}
cout<<ans<<endl;
}else{
for(int i=l[ll];i<=r[ll];i++){
if(a[i].id>=ql&&a[i].id<=qr){
a[i].h+=w;
}
}
sort(a+l[ll],a+r[ll]+1,cmp);
if(ll!=rr){
for(int i=l[rr];i<=r[rr];i++){
if(a[i].id>=ql&&a[i].id<=qr){
a[i].h+=w;
}
}
sort(a+l[rr],a+r[rr]+1,cmp);
for(int i=ll+1;i<rr;i++){
tag[i]+=w;
}
}
}
}
}