#include<bits/stdc++.h>
using namespace std;
const int N = 1 << 18;
int n,t,o,f[N],sum[N],tag[N];
void pushup(int u) {
sum[u] = sum[u*2] | sum[u*2 + 1];
}
void pushdown(int u,int l,int r) {
if(tag[u]) {
sum[u*2] = sum[u*2 | 1] = 1 << (tag[u] - 1);
tag[u*2] = tag[u*2 | 1] = tag[u];
tag[u] = 0;
}
}
void build(int u,int l,int r) {
tag[u] = 0;
if(l == r) {
sum[u] = 1;
return;
}
int mid = (l + r) >> 1;
build(u*2,l,mid);
build(u*2 + 1,mid + 1,r);
pushup(u);
}
void update(int x,int y,int k,int u,int l,int r) {
if(x <= l && r <= y) {
tag[u] = k;
sum[u] = (1 << (k - 1));
return;
}
pushdown(u,l,r);
int mid = (l + r) >> 1;
if(y <= mid) {
update(x,y,k,u*2,l,mid);
}else{
if(x > mid) {
update(x,y,k,u*2 + 1,mid+1,r);
}else {
update(x,y,k,u*2,l,mid);
update(x,y,k,u*2 + 1,mid+1,r);
}
}
pushup(u);
}
int query(int x,int y,int u,int l,int r) {
if(x <= l && r <= y) return sum[u];
pushdown(u,l,r);
int mid = (l + r) >> 1;
if(y <= mid) return query(x,y,u*2,l,mid);
if(x > mid) return query(x,y,u*2 + 1,mid+1,r);
return query(x,y,u*2,l,mid) + query(x,y,u*2 + 1,mid+1,r);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> t >> o;
for(int i = 1;i<=n;i++) {
f[i] = 1;
}
build(1,1,n);
while(o--) {
char op;
int a,b;
cin >> op >> a >> b;
if(a > b) {
swap(a,b);
}
if(op == 'C') {
int c;
cin >> c;
update(a,b,c,1,1,n);
}else {
cout << query(a,b,1,1,n) << '\n';
}
}
return 0;
}