#include<bits/stdc++.h>
#define rs dep<<1|1
#define ls dep<<1
using namespace std;
const int Maxn=1e5+10;
struct E{
int v;
int next;
}e[Maxn];
int head[Maxn];
int fa[Maxn];
int son[Maxn];
int v[Maxn];
int dep[Maxn];
int dfn[Maxn];
int siz[Maxn];
int top[Maxn];
int w[Maxn];
int sum[Maxn*4];
int rp[Maxn*4];
int lp[Maxn*4];
int id[Maxn];
int cnt=0,tim=0;
int N,M,P,R;
void build(int u,int v){
e[++cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt;
}
void dfs1(int u,int f){
fa[u]=f;
dep[u]=dep[f]+1;
siz[u]=1;
int meme=-1;
for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].v;
if(v==f)continue;
dfs1(v,u);
siz[u]+=siz[v];
if(siz[v]>meme){
meme=siz[v];
son[u]=v;
}
}
}
void dfs2(int u,int t){
top[u]=t;
dfn[u]=++tim;
id[tim]=u;
w[tim]=v[u];
if(!son[u])return ;
dfs2(son[u],t);
for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].v;
if(v==fa[u]||v==son[u])continue;
dfs2(v,v);
}
}
void push_up(int dep){
sum[dep]=sum[ls]+sum[rs];
}
void t_build(int l,int r,int dep){
if(l==r){
sum[dep]=w[l];
lp[dep]=rp[dep]=l;
return ;
}
int mid=(l+r)>>1;
t_build(l,mid,ls);
t_build(mid+1,r,rs);
lp[dep]=l;
rp[dep]=r;
push_up(dep);
}
void ad(int L,int R,int l,int r,int dep){
if(l==L&&r==R){
sum[dep]++;
return ;
}
int mid=(l+r)>>1;
if(L<=mid)ad(L,R,l,mid,ls);
if(R>mid)ad(L,R,mid+1,r,rs);
push_up(dep);
}
int ser(int L,int R,int l,int r,int dep){
if(L<=l&&r<=R){
return sum[dep];
}
int res=0;
int mid=l+r>>1;
if(L<=mid)res+=ser(L,R,l,mid,ls);
if(R>mid)res+=ser(L,R,mid+1,r,rs);
return res;
}
void st(){
memset(head,-1,sizeof(head));
return ;
}
int ef(int l,int r){
if(l==r)return id[l];
int mid=(l+r)>>1;
int tmp=ser(mid+1,r,1,N,1);
if(tmp)ef(mid+1,r);
else ef(l,mid);
}
int nl(int x,int y){
while(top[x]!=top[y]){
if(dep[x]<dep[y])swap(x,y);
int tmp=ser(dfn[top[x]],dfn[x],1,N,1);
if(tmp){
return ef(dfn[top[x]],dfn[x]);
}
x=fa[top[x]];
}
if(dep[x]>dep[y])swap(x,y);
return ef(dep[x],dep[y]);
}
int main(){
v[1]=1;
st();
cin>>N>>M;
for(int i=1;i<N;i++){
int iu,ui;
cin>>iu>>ui;
build(iu,ui);
}
dfs1(1,1);
dfs2(1,1);
t_build(1,N,1);
for(int i=1;i<=M;i++){
char a;
cin>>a;
if(a=='C'){
int x;
cin>>x;
ad(dfn[x],dfn[x],1,N,1);
}
if(a=='Q'){
int x;
cin>>x;
cout<<nl(1,x)<<"\n";
}
a=0;
}
return 0;
}