#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'; }