#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define int long long
using namespace std;
int L[20111],R[20111],pos[2011111],n,tot,len,s[2011111],blk[2011111],T,tag[201111];
int query(int l,int r,int x)
{
int ans = 0,i,j;
if(pos[l] == pos[r])
{
for(i = l;i <= r;i++)if(s[i] + tag[pos[l]] >= x)ans++;
return ans;
}
for(i = l;i <= R[pos[l]];i++)if(s[i] + tag[pos[l]] >= x)ans++;
for(i = L[pos[r]];i <= r;i++)if(s[i] + tag[pos[r]] >= x)ans++;
for(i = pos[l] + 1;i < pos[r];i++)
{
int ll = L[i],rr = R[i] + 1;
while(ll < rr)
{
int mid = ll + rr >> 1;
if(blk[mid] + tag[i] >= x)rr = mid;
else ll = mid + 1;
}
ans += R[i] - ll + 1;
}
return ans;
}
void modify(int l,int r,int x)
{
int i,j;
if(pos[l] == pos[r])
{
for(i = l;i <= R[pos[l]];i++)
s[i] += x;
for(i = L[pos[l]];i <= R[pos[l]];i++)
blk[i] = s[i];
sort(blk + L[pos[l]],blk + R[pos[l]]);
return;
}
for(i = l;i <= R[pos[l]];i++)
s[i] += x;
for(i = L[pos[l]];i <= R[pos[l]];i++)
blk[i] = s[i];
sort(blk + L[pos[l]],blk + R[pos[l]]);
for(i = L[pos[r]];i <= r;i++)
s[i] += x;
for(i = L[pos[r]];i <= R[pos[r]];i++)
blk[i] = s[i];
sort(blk + L[pos[r]],blk + R[pos[r]]);
for(i = pos[l] + 1;i < pos[r];i++)
tag[i] += x;
}
signed main()
{
cin>>n>>T;
int i,j;
len = sqrt(n);
tot = len;
if(n % len)tot++;
for(i = 1;i <= n;i++)cin>>s[i],blk[i] = s[i];
for(i = 0;i <= 20001;i++)L[i] = 1e9;
for(i = 1;i <= n;i++)
{
pos[i] = (i - 1) / len + 1;
L[pos[i]] = min(L[pos[i]],i);
R[pos[i]] = max(R[pos[i]],i);
}
for(i = 1;i <= tot;i++)
sort(blk + L[pos[i]],blk + R[pos[i]]);
while(T--)
{
char op;cin>>op;
if(op == 'A')
{
int l,r,x;cin>>l>>r>>x;
cout<<query(l,r,x)<<endl;
}
else
{
int l,r,x;cin>>l>>r>>x;
modify(l,r,x);
}
}
}