E. Caisa и дерево
ограничение по времени на тест
10 секунд
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Caisa сейчас дома и его сын придумал для него простую задачку.

Задано корневое дерево, состоящее из n вершин, пронумерованных от 1 до n (вершина 1 — корень дерева). В каждой вершине записано некоторое значение. Требуется ответить на q запросов. Каждый запрос является одним из следующих:

  • Формат запроса «1 v». Выпишем последовательность вершин вдоль пути от корня до вершины v: u1, u2, ..., uk (u1 = 1; uk = v). Выведите такую вершину ui, что gcd(значение вершины ui, значение вершины v) > 1 и i < k. Если существует несколько таких вершин, выведите вершину с максимальным значением i. Если таких вершин вовсе нет, выведите -1.
  • Формат запроса «2 v w». Нужно изменить значение, записанное в вершине v, на w.

Вам заданы все запросы, помогите Caisa справиться с этой задачей.

Входные данные

В первой строке записаны два целых числа n, q (1 ≤ n, q ≤ 105).

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2·106), где ai обозначает значение, записанное в вершине i изначально.

В каждой из следующих n - 1 строк записаны два целых числа xi и yi (1 ≤ xi, yi ≤ nxi ≠ yi), обозначающие, что в дереве есть ребро между вершинами xi и yi.

В каждой из следующих q строк задан запрос в формате, описанном выше. Для каждого запроса выполняются следующие неравенства: 1 ≤ v ≤ n и 1 ≤ w ≤ 2·106. Обратите внимание: не более 50 запросов из всех меняют значение в вершине.

Выходные данные

Для каждого запроса первого типа выведите ответ на него.

Примеры
Входные данные
4 6
10 8 4 3
1 2
2 3
3 4
1 1
1 2
1 3
1 4
2 1 9
1 4
Выходные данные
-1
1
2
-1
1
Примечание

Запись gcd(x, y) обозначает наибольший общий делитель целых чисел x и y.