#include <iostream>
#include <algorithm>
#include <vector>

#define NMAX 100005
#define lsb(x) ((x)&(-x))
using namespace std;

int n,poz1;
int first[NMAX];
int last[NMAX];

vector<int> graf[NMAX];
int father[NMAX],poz2,hul;

int euler[2*NMAX];
int unde[NMAX];
int h[2*NMAX];

void dfs(int nod){
    euler[++poz2]=nod;
    unde[nod]=poz2;
    h[poz2]=++hul;

    first[nod]=++poz1;
    for(vector<int>::iterator it=graf[nod].begin();it!=graf[nod].end();it++)
        if(*it!=father[nod]){
            father[*it]=nod;

            dfs(*it);

            euler[++poz2]=nod;
            h[poz2]=hul;
        }

    last[nod]=++poz1;

    --hul;
}

int logar[2*NMAX];
int din[19][2*NMAX];

void precalc_rmq(){
    logar[2]=1;
    for(int i=3;i<2*NMAX;i++)
        logar[i]=1+logar[i/2];

    int i,j;
    for(i=1;i<=poz2;i++)
        din[0][i]=i;

    for(i=1;(1<<i)<=poz2;i++)
        for(j=1;j+(1<<i)-1<=poz2;j++)
            if(h[din[i-1][j]]<h[din[i-1][j+(1<<(i-1))]])
                din[i][j]=din[i-1][j];
            else
                din[i][j]=din[i-1][j+(1<<(i-1))];
}

inline int lca(int a,int b){
    a=unde[a];
    b=unde[b];

    if(a>b)
        swap(a,b);

    int y=logar[b-a+1];
    if(h[din[y][a]]<h[din[y][b-(1<<y)+1]])
        return euler[din[y][a]];
    return euler[din[y][b-(1<<y)+1]];
}

inline int dist (int a, int b) {
    int l=lca(a,b);

    return (h[a]+h[b]-h[l]);
}

int main()
{
    //ifstream cin("disconnect.in");
    //ofstream cout("disconnect.out");

    int m=0;
    cin>>n>>m;

    int x,y;
    for(int i=1;i<n;i++){
        cin>>x>>y;
        graf[x].push_back(y);
        graf[y].push_back(x);
    }

    dfs(1);
    precalc_rmq();

    int type;

    int _rad;
    while(m--) {
        cin>>type;

        if(type==1) {
            cin>>x;
            _rad=x;
        }
        else {
            cin>>x>>y;

            if(dist(x,_rad)+dist(_rad,y)==dist(x,y)) {
                cout<<_rad<<endl;
                continue;
            }
            else if(dist(_rad,x)+dist(x,y)==dist(_rad,y)) {
            cout<<_rad<<endl;
                continue;
                }
            else if(dist(x,y)+dist(y,_rad)==dist(x,_rad)) {
            cout<<_rad<<endl;
                continue;
                }

            int l=lca(x,y);
            int p=lca(x,_rad);
            int t=lca(y,_rad


                      );

            int ans;

            if(t==l) {
                ans=p;
            }
            else if(p==l) {
                ans=t;
            }
            else
                ans=l;

            if(ans==x || ans==y) {
                cout<<"-1\n";
            }
            else
                cout<<ans<<endl;
        }
    }

    //cin.close();
    //cout.close();
    return 0;
}