#include <iostream>
#include <cstring>
using namespace std;

#define N 100000
int boss[N];
char vizit[N];
int ceo;
int n,m;

void afisare(){

	for(int i = 1 ; i <= n ;i++){
		cout<<boss[i]<<" ";
	}
	cout<<"\n";
}
int common_boss(int a,int b){
	int common_boss = -1;
	int current = a;
	while(current != -1){
		vizit[current] = 1;
		current = boss[current];
		// b bosul lui a
		if (current == b) 
			return -1;
	}

	current = b;
	int current_boss;
	while(current != -1){
		current_boss = boss[current];
		// a bosul lui b
		if (current_boss == a) 
			return -1;
		if (vizit[current_boss] ){
			common_boss = current_boss;
			break;
		}
		current = boss[current];
	}
	memset (vizit,0,n+1);
	return common_boss;
}

void change_ceo(int new_ceo){
	int current = new_ceo;
	
	int tmp = -1;
	int old = -1;
	while(current != -1){
		tmp = current;
		//
		current = boss[current] ;
		boss[tmp] = old;
		old = tmp;
	}
	boss[new_ceo ] = -1;
}
int main(){
	
	ceo = 1;
	int a,b;
	int boss_crt;
	int slave ;

	cin>>n>>m;
	boss[ceo] = -1;
	for (int i = 0 ; i < n -1; i++){
		cin>>a>>b;
		boss_crt = a;
		slave = b;
		if (a > b ) {
			boss_crt = b;
			slave = a;
		}
		boss[slave] = boss_crt;

	}

	int type ;
	int new_boss;
	for (int i = 0 ; i < m ; i++){
		cin>>type;
		if (type == 1){
			cin>>new_boss;
			change_ceo(new_boss);
		}
		if (type == 2){
			cin>>a>>b;
			int comm = common_boss(a,b);
			cout<<comm<<"\n";
		}
	}
	return 0;
}