#include <iostream>
#include <vector>
#define DMAX 100004

using namespace std;

//ifstream fin("date.in");
//ofstream fout("date.out");

int n, m;
vector <int> A[DMAX];
int C[DMAX], uz[DMAX];
int h[DMAX], tata[DMAX];

void citire();
void operatii();
void BOSS(int);
void FIND(int, int);

int main()
{
    citire();
    BOSS(1);
    operatii();
    return 0;
}

void citire()
{
    int i, x, y;
    std::cin>>n>>m;
    for(i=1;i<n;++i)
    {
        std::cin>>x>>y;
        A[x].push_back(y);
        A[y].push_back(x);
    }
}

void operatii()
{
    int i, op, x, y;
    for(i=1;i<=m;++i)
    {
        std::cin>>op;
        if(op==1)
        {
            std::cin>>x;
            BOSS(x);
        }
            else
            {
                std::cin>>x>>y;
                FIND(x, y);
            }
    }
}

void BOSS(int x)
{
    int prim=1, ultim=1;
    int i, aux, lg;
    C[1]=x; h[x]=1; uz[x]++;
    tata[x]=0;

    while(prim<=ultim)
    {
        aux=C[prim++];
        uz[aux]++;
        lg=A[aux].size();

        for(i=0;i<lg;++i)
            if(uz[A[aux][i]]<uz[aux])
            {
                uz[A[aux][i]]++; h[A[aux][i]]=h[aux]+1; tata[A[aux][i]]=aux;
                C[++ultim]=A[aux][i];
            }
    }
}


void FIND(int x, int y)
{
    int i, aux, cx=x, cy=y;
    if(h[x]<h[y]) {aux=x; x=y; y=aux;}

    while(h[x]>h[y]) x=tata[x];
    while(x!=y) {x=tata[x]; y=tata[y];}

    if(x==cx || y==cy)
        std::cout<<"-1\n";
        else std::cout<<x<<'\n';
}