#include <bits/stdc++.h>
using namespace std;
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define mid ((l+r)>>1)
const int MAXN = 1e5 + 5;
int L,T,O;
bitset <32> s[MAXN << 2],t[MAXN << 2],ans;
void push_up(int p){
s[p] = s[ls(p)] | s[rs(p)];
}
void push_down(int p){
s[ls(p)] = t[p];
s[rs(p)] = t[p];
t[ls(p)] = t[rs(p)] = t[p];
t[p] = 0;
}
void build(int p,int l,int r){
if (l==r){
s[p][1] = 1;
return ;
}
build(ls(p),l,mid);
build(rs(p),mid+1,r);
push_up(p);
}
void update(int p,int l,int r,int L,int R,int x){
if (l > R || r < L) return ;
if (l >= L && r <= R){
s[p] = 0;
t[p] = 0;
s[p][x] = 1;
t[p][x] = 1;
return;
}
if (t[p].count()) push_down(p);
update(ls(p),l,mid,L,R,x);
update(rs(p),mid+1,r,L,R,x);
push_up(p);
}
void ask(int p,int l,int r,int L,int R){
if (l > R || r < L){
return ;
}
if (l >= L && r <= R){
ans = ans | s[p];
return ;
}
if (t[p].count()) push_down(p);
ask(ls(p),l,mid,L,R);
ask(rs(p),mid+1,r,L,R);
}
int main(){
ios::sync_with_stdio(0);
cin >> L >> T >> O;
build(1,1,L);
while (O--){
char o;
cin >> o;
if (o == 'C'){
int l,r,x;
cin >> l >> r >> x;
update(1,1,L,l,r,x);
}else{
int l,r;
cin >> l >> r;
ans = 0;
ask(1,1,L,l,r);
cout << ans.count() << endl;
}
}
return 0;
}