#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 1000
using namespace std;
//FILE* fin=freopen("date.in","r",stdin);
//FILE* fout=freopen("date.out","w",stdout);
vector <int> G[NMAX];
void BFS();
int n,m,uz[NMAX],tata[NMAX],ceo;
int lca(int x,int y);
int main()
{
    int i,x,y,a;
    scanf("%d %d ",&n,&m);
    for (i=1; i<n; i++)
    {
        scanf("%d %d",&x,&y);
        G[x].push_back(y);
        G[y].push_back(x);
    }
    BFS();
    ceo=1;
    for (i=1; i<=m; i++)
    {
        scanf("%d",&a);
        if (a==1)
        {
            scanf("%d",&x);
            tata[ceo]=x;
            tata[x]=0;
            ceo=x;
            continue;
        }
        if (a==2)
        {
            scanf("%d %d",&x,&y);
            printf("%d\n",lca(x,y));

        }
    }


    return 0;
}
void BFS()
{
    queue <int> q;
    int i,crt;
    q.push(1);
    uz[1]=1;
    tata[1]=-1;
    while (!q.empty())
    {
        crt=q.front(); q.pop();
        for (i=0; i<G[crt].size(); i++)
        {
            if (!tata[G[crt][i]])
            {
                tata[G[crt][i]]=crt;
            }
            if (!uz[G[crt][i]])
            { q.push(G[crt][i]); uz[G[crt][i]]=1;}
        }
    }
    tata[1]=0;
}
int lca(int x,int y)
{
    int i,x1=x,y1=y;
    for (i=1; i<=n; i++) uz[i]=0;
    if (!tata[x] || !tata[y]) return ceo;
    while (tata[x])
    {
        if (tata[x]==y1) return -1;
        uz[tata[x]]=1;
        x=tata[x];
    }
    while (tata[y])
    {
        if (tata[y]==x1) return -1;
        if (uz[tata[y]]==1) return tata[y];
        y=tata[y];
    }
}