#include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r,lc,rc,d;
};node trn[200010];
struct tree
{
int dfn,fa,top,dep,son,size;
};tree tr[100010];
struct edge
{
int x,y,next;
};edge e[100010];
inline int read()
{
register int x=0,f=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-')f=-1;
c=getchar();
}
while(c<='9'&&c>='0')
{
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x*f;
}
int n,q,u,v;
int len1=0;
int last[100010];
void ins(int x,int y)
{
len1++;
e[len1]={x,y,last[x]};
last[x]=len1;
}
int len2=0;
int bt(int l,int r)
{
len2++;
int now=len2;
int lc=-1,rc=-1,d=0;
if(l==r)
{
if(l==1)d=1;
}
else
{
int mid=(l+r)/2;
lc=bt(l,mid);
rc=bt(mid+1,r);
d=max(trn[lc].d,trn[rc].d);
}
trn[now]={l,r,lc,rc,d};
return now;
}
void dfs1(int x)
{
tr[x].size=1;
for(int i=last[x];i;i=e[i].next)
{
int y=e[i].y;
if(!tr[y].size)
{
dfs1(y);
tr[x].size+=tr[y].size;
if(tr[x].son==-1||tr[tr[x].son].size<tr[y].size)
tr[x].son=y;
}
}
}
int cnt=0;
void dfs2(int x,int f,int top)
{
cnt++;
tr[x].fa=f;
tr[x].dep=tr[f].dep+1;
tr[x].dfn=cnt;
tr[x].top=top;
if(tr[x].son==0)return;
dfs2(tr[x].son,x,top);
for(int i=last[x];i;i=e[i].next)
{
int y=e[i].y;
if(y!=tr[x].son&&y!=tr[x].fa)
{
dfs2(y,x,y);
}
}
}
void change(int now,int x)
{
int lc=trn[now].lc,rc=trn[now].rc;
int l=trn[now].l,r=trn[now].r;
if(l==r)
{
trn[now].d=x;
}
else
{
int mid=(l+r)/2;
if(x<=mid)change(lc,x);
else change(rc,x);
trn[now].d=max(trn[lc].d,trn[rc].d);
}
}
int findmax(int now,int x,int y)
{
int lc=trn[now].lc,rc=trn[now].rc;
int l=trn[now].l,r=trn[now].r;
if(l==x&&r==y)
{
return trn[now].d;
}
else
{
int mid=(l+r)/2;
if(y<=mid)return findmax(lc,x,y);
else if(x>mid)return findmax(rc,x,y);
else
{
return max(findmax(lc,x,mid),findmax(rc,mid+1,y));
}
}
}
int Ans(int x)
{
int ans=0;
while(tr[x].top!=1)
{
ans=findmax(1,tr[tr[x].top].dfn,tr[x].dfn);
if(ans!=0)return ans;
x=tr[tr[x].top].fa;
}
ans=findmax(1,1,tr[x].dfn);
return ans;
}
int main()
{
n=read();
q=read();
for(int i=1;i<n;i++)
{
u=read();
v=read();
ins(u,v);
}
char op[3];
dfs1(1);
dfs2(1,1,1);
bt(1,n);
while(q--)
{
scanf("%s",op);
u=read();
if(op[0]=='C')
change(1,tr[u].dfn);
else printf("%d\n",Ans(u));
}
return 0;
}