Знову XOR, знову запити, знову дерево — романтика (с) Ануар Серіков
Де XOR немає місця словам. Отже, давайте рухатися далі до задачі.
У вас є кореневе дерево з вершинами, пронумерованими від до . Кожна вершина має певне значення. Вершина є коренем дерева.
Вам потрібно обробити запитів двох типів:
— замініть значення у всіх вершинах піддерева вершини . Якщо у вершині записано число , замініть його на x \oplus y.
— знайдіть мінімальне значення серед чисел на простому шляху з вершини до вершини . Тобто, якщо числа на цьому шляху — це a_1, a_2, \dots, a_k, то відповіддю буде мінімум цієї послідовності.
Перший рядок містить два цілі числа n~(1 \le n \le 3*10^4) — кількість вершин у дереві, і (1 \le q \le 3*10^4) — кількість запитів.
Другий рядок містить послідовність з цілих чисел a_1, a_2, \dots, a_n~(0 \le a_i < 2^{20}) — значення, записані на вершинах.
Далі йдуть n - 1 рядок, що описує ребра дерева. Кожний рядок містить пару цілих чисел x_i, y_i~(1 \leq x_i, y_i \leq n, x_i \ne y_i) — вершини, з'єднані ребром. Гарантовано, що граф є зв'язним деревом.
Останні рядків описують запити. Перше число в -му рядку type_i — тип -го запиту. Якщо type_i = 1, то слідують два цілі числа v_i і x_i~(1 \le v_i \le n, 0 \le x_i < 2^{20}), інакше слідують два цілі числа u_i і v_i~(1 \le u_i, v_i \le n). Всі вхідні числа є цілими.
Для кожного запиту 2-го типу виведіть в окремому рядку одне ціле число — відповідь на запит.
— виключаюче OR, наприклад 3 \oplus 5 = 6.
Приклад 1