/*https://oj.uz/problem/view/BOI11_grow*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100000;
int st[4*N+2];
int lazy[4*N+2];
int a[N+2];
int n,q;
void push(int id){
int &t=lazy[id];
st[id*2]+=t;
st[id*2+1]+=t;
lazy[id*2]+=t;
lazy[id*2+1]+=t;
t=0;
}
void update(int id,int l,int r,int u,int v,int x){
if(l>v||r<u) return;
if(l>=u&&r<=v){
st[id]+=x;
lazy[id]+=x;
return;
}
push(id);
int mid=(l+r)/2;
update(id*2,l,mid,u,v,x);
update(id*2+1,mid+1,r,u,v,x);
st[id]=max(st[id*2],st[id*2+1]);
}
int get(int id,int l,int r,int x){
if(l>x||r<x) return -1;
if(l==r){
return st[id];
}
push(id);
int mid=(l+r)/2;
return max(get(id*2,l,mid,x),get(id*2+1,mid+1,r,x));
}
//upperbound
int jump1(int id,int l,int r,int x){
if(st[id]<=x) return n+1;
if(l==r){
return l;
}
push(id);
int mid=(l+r)/2;
int res=jump1(id*2,l,mid,x);
if(res!=n+1) return res;
return jump1(id*2+1,mid+1,r,x);
}
//lowerbound
int jump2(int id,int l,int r,int x){
if(st[id]<x) return n+1;
if(l==r){
return l;
}
push(id);
int mid=(l+r)/2;
int res=jump2(id*2,l,mid,x);
if(res!=n+1) return res;
return jump2(id*2+1,mid+1,r,x);
}
int main(){
#define task ""
if(fopen(task ".inp", "r")){
freopen(task ".inp", "r", stdin);
freopen(task ".out", "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
update(1,1,n,i,i,a[i]);
}
while(q--){
char t;
cin>>t;
if(t=='F'){
int c,h;
cin>>c>>h;
int p=jump2(1,1,n,h);
if(p+c-1>=n) update(1,1,n,p,n,1);
else{
int x=get(1,1,n,p+c-1);
int p2=jump2(1,1,n,x);
update(1,1,n,p,p2-1,1);
int len=c-(p2-p);
p2=jump1(1,1,n,x);
update(1,1,n,p2-len,p2-1,1);
}
}
if(t=='C'){
int mx,mn;
cin>>mn>>mx;
int l=jump2(1,1,n,mn),r=jump1(1,1,n,mx);
cout<<r-l<<'\n';
}
}
return 0;
}