import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Bosses { int typeOfQuestion; int n, m; Node head = null; Node[] nodeArray; class Node { @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + number; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Node other = (Node) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (number != other.number) return false; return true; } @Override public String toString() { return number + ""; } int number; Node next; public Node(int n) { number = n; } private Bosses getOuterType() { return Bosses.this; } } public Bosses() { Scanner in = new Scanner(System.in); String[] line = in.nextLine().split(" "); n = Integer.parseInt(line[0]); m = Integer.parseInt(line[1]); nodeArray = new Node[n + 1]; for (int i = 1; i < n; i++) { line = in.nextLine().split(" "); Integer node1 = Integer.parseInt(line[0]); Integer node2 = Integer.parseInt(line[1]); if (nodeArray[node1] == null) nodeArray[node1] = new Node(node1); if (nodeArray[node2] == null) nodeArray[node2] = new Node(node2); nodeArray[node1].next = nodeArray[node2]; } becomeBoss(nodeArray[1]); for (int i = 1; i <= m; i++) { line = in.nextLine().split(" "); typeOfQuestion = Integer.parseInt(line[0]); if (typeOfQuestion == 1) { // devin boss int node1 = Integer.parseInt(line[1]); becomeBoss(nodeArray[node1]); } else { int node1 = Integer.parseInt(line[1]); int node2 = Integer.parseInt(line[2]); resolveConflict(nodeArray[node1], nodeArray[node2]); } } in.close(); } public void becomeBoss(Node node) { if (node.next == null) return; Node nodeNext = node.next; changeRelation(node, nodeNext); node.next = null; } public void changeRelation(Node node, Node nodeNext) { if (nodeNext == null) return; Node newNode = nodeNext.next; nodeNext.next = node; changeRelation(nodeNext, newNode); } public void resolveConflict(Node node1, Node node2) { Set hashSet = new HashSet(); Node copyNode1 = node1; hashSet.add(node1); while (node1.next != null) { hashSet.add(node1.next); node1 = node1.next; } if (hashSet.contains(node2)) { System.out.println("-1"); return; } while (node2.next != null) { node2 = node2.next; if (node2 == copyNode1) { System.out.println("-1"); return; } if (hashSet.contains(node2)) { System.out.println(node2); return; } } System.out.println("-1"); } public static void main(String[] args) { new Bosses(); } }