#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=4e6+10;
int n,c,q;
struct T{
int sum;
int l,r;
int lazy;
}t[N<<1];
void up(int k){
t[k].sum=t[k<<1].sum|t[k<<1|1].sum;
}
void build(int k,int l,int r){
t[k].l=l;
t[k].r=r;
if(l==r){
t[k].sum=1;
t[k].lazy=0;
return;
}
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
up(k);
}
void ch(int k,int l,int r,int x){
if(t[k].l>=l&&t[k].r<=r){
t[k].sum=(1ll<<(x-1));
t[k].lazy=(1ll<<(x-1));
return;
}
int mid=(t[k].l+t[k].r)>>1;
if(l<=mid){
ch(k<<1,l,r,x);
}
if(r>mid){
ch(k<<1|1,l,r,x);
}
up(k);
return;
}
void down(int k){
t[k<<1].lazy=t[k].lazy;
t[k<<1|1].lazy=t[k].lazy;
t[k<<1].sum=t[k].lazy;
t[k<<1|1].sum=t[k].lazy;
t[k].lazy=0;
}
int ask(int k,int l,int r){
if(t[k].l>=l&&t[k].r<=r){
down(k);
return t[k].sum;
}
if(t[k].lazy){
down(k);
}
int mid=(t[k].l+t[k].r)>>1;
int v=0;
if(l<=mid){
v=ask(k<<1,l,r);
}
if(r>mid){
v=v|(ask(k<<1|1,l,r));
}
return v;
}
signed main(){
cin>>n>>c>>q;
build(1,1,n);
for(int i=1;i<=q;i++){
char a;
cin>>a;
if(a=='C'){
int l,r,x;
cin>>l>>r>>x;
if(l>r){
swap(l,r);
}
ch(1,l,r,x);
}
else{
int l,r;
cin>>l>>r;
if(l>r){
swap(l,r);
}
int o=ask(1,l,r);
int cnt=0;
//cout<<o<<endl;
for(int j=(1ll<<29);j;j=j>>1){
if((o&j)==j){
cnt++;
}
}
cout<<cnt<<'\n';
}
}
return 0;
}