#include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long #define inf (1<<30) #define maxn 100010 ifstream fin ("A.in"); ofstream fout ("A.out"); int E[2*maxn],L[maxn],P[maxn]; int rmq[18][2*maxn]; vector T[maxn]; int n,m,x,t,a,b,op,y; void euler (int x, int f, int lv) { E[++t] = x; L[x] = lv; P[x] = t; for (int i = 0; i < T[x].size(); ++i) { if (T[x][i] != f) { euler (T[x][i], x, lv+1); E[++t] = x; } } } int lca (int x, int y) { int a = P[x]; int b = P[y]; if (a > b) swap (a,b); int c = log2(b-a+1); if ( L[rmq[c][a]] < L[rmq[c][b-(1<>n>>m; for (int i = 1; i < n; ++i) { cin>>a>>b; T[a].push_back (b); T[b].push_back (a); } euler(1,0,1); for (int i = 1; i <= t; ++i) { rmq[0][i] = E[i]; } for (int i = 1; (1<>op; if (op == 1) { cin>>x; cr = x; } else { cin>>x>>y; int a = lca(x,y); int b = lca(x,cr); int c = lca(y,cr); int l = a; if (L[b] > L[l]) l = b; if (L[c] > L[l]) l = c; if (l == x || l == y) cout<<-1; else cout<