#include <bits/stdc++.h>
using namespace std;
int n,m,u,a[100005],co[33],mak;
struct node{
int l,r,s;
}t[400005];
void lazy(int k,int v)
{
t[k].s=v;
}
void putdown(int k)
{
lazy(k*2,t[k].s);
lazy(k*2+1,t[k].s);
t[k].s=0;
}
void build(int k,int le,int ri)
{
t[k].l=le;
t[k].r=ri;
t[k].s=0;
if(le==ri)
return;
int mid=(le+ri)/2;
build(k*2,le,mid);
build(k*2+1,mid+1,ri);
}
void change(int k,int le,int ri,int v)
{
if(t[k].l>=le && t[k].r<=ri)
return lazy(k,v);
if(t[k].s!=0)
putdown(k);
int mid=(t[k].l+t[k].r)/2;
if(le<=mid)
change(k*2,le,ri,v);
if(ri>mid)
change(k*2+1,le,ri,v);
if(t[k*2].s==t[k*2+1].s)
{
t[k].s=t[k*2].s;
t[k*2].s=0;
t[k*2+1].s=0;
}
}
void qu(int k,int le,int ri)
{
if(t[k].l>=le && t[k].r<=ri)
{
if(t[k].s!=0)
co[t[k].s]=1;
else
{
int mid=(t[k].l+t[k].r)/2;
if(le<=mid)
{
if(k*2<=mak)
qu(k*2,le,ri);
else
co[t[k].s]=1;
}
if(ri>mid)
{
if(k*2+1<=mak)
qu(k*2+1,le,ri);
else
co[t[k].s]=1;
}
}
return;
}
if(t[k].s!=0)
putdown(k);
int mid=(t[k].l+t[k].r)/2;
if(le<=mid)
qu(k*2,le,ri);
if(ri>mid)
qu(k*2+1,le,ri);
}
int main()
{
cin>>n>>m>>u;
build(1,1,n);
t[1].s=1;
for(int i=1;i<=u;i++)
{
char c;
cin>>c;
if(c=='C')
{
int w,y,z;
if(w>y)
swap(w,y);
cin>>w>>y>>z;
change(1,w,y,z);
}
else
{
int y,z;
cin>>y>>z;
if(y>z)
swap(y,z);
memset(co,0,sizeof(co));
qu(1,y,z);
int ans=0;
for(int i=1;i<=m;i++)
if(co[i]==1)
ans++;
cout<<ans<<endl;
}
}
return 0;
}