#include<bits/stdc++.h>
using namespace std;
int pure[400005];
set<int> color;
void tuse(int node,int start,int end,int l,int r,int k)
{
if(start>r||end<l)return;
if(start>=l&&end<=r)
{
pure[node]=k;
return;
}
else
{
if(pure[node])
{
pure[node*2]=pure[node];
pure[node*2+1]=pure[node];
pure[node]=0;
}
if(start!=end)
{
int mid=(start+end)/2;
tuse(node*2,start,mid,l,r,k);
tuse(node*2+1,mid+1,end,l,r,k);
}
}
}
void query(int node,int start,int end,int l,int r)
{
if(start>r||end<l)return;
if(start>=l&&end<=r&&pure[node]) color.insert(pure[node]);
else
{
if(pure[node])
{
pure[node*2]=pure[node];
pure[node*2+1]=pure[node];
pure[node]=0;
}
if(start!=end)
{
int mid=(start+end)/2;
query(node*2,start,mid,l,r);
query(node*2+1,mid+1,end,l,r);
}
}
}
int main()
{
ios::sync_with_stdio(false);
int l,t,o;
cin>>l>>t>>o;
for(int i=1;i<=4*l;i++)pure[i]=1;
while(o--)
{
char op;
cin>>op;
if(op=='C')
{
int x,y,k;
cin>>x>>y>>k;
if(y<x)swap(x,y);
tuse(1,1,l,x,y,k);
}
else
{
int x,y;
cin>>x>>y;
if(y<x)swap(x,y);
query(1,1,l,x,y);
cout<<color.size()<<endl;
color.clear();
}
}
return 0;
}