D. Реструктуризация компании
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В жизни даже самой успешной компании может наступить кризисный период, когда приходится принимать тяжёлое решение о реструктуризации, распускать и объединять отделы, увольнять работников и заниматься прочими неприятными делами. Рассмотрим следующую модель компании.

В Большой Софтверной Компании работают n человек. Каждый человек принадлежит какому-то отделу. Исходно каждый человек работает над своим проектом в своём собственном отделе (таким образом, в начале компания состоит из n отделов по одному человеку).

Однако, в жизни компании наступили тяжёлые времена, и руководство было вынуждено нанять кризисного менеджера, который начал переустраивать рабочий процесс для повышения эффективности производства. Обозначим за team(person) команду, в которой работает человек person. Кризисный менеджер может принимать решения двух типов:

  1. Объединить отделы team(x) и team(y), сформировав из них один большой отдел, содержащий всех сотрудников team(x) и team(y), где x и y (1 ≤ x, y ≤ n) — номера каких-то двух сотрудников компании. Если team(x) совпадает с team(y), ничего делать не требуется.
  2. Объединить отделы team(x), team(x + 1), ..., team(y), где x и y (1 ≤ x ≤ y ≤ n) — номера каких-то двух сотрудников компании.

При этом кризисный менеджер иногда может интересоваться, работают ли в одном отделе сотрудники x и y (1 ≤ x, y ≤ n).

Помогите кризисному менеджеру, ответив на все его запросы.

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

Первая строка входных данных содержит два целых числа n и q (1 ≤ n ≤ 200 000, 1 ≤ q ≤ 500 000) — количество сотрудников компании и количество запросов кризисного менеджера.

В последующих q строках находятся запросы кризисного менеджера. Каждый запрос имеет вид type x y, где . Если type = 1 или type = 2, то запрос представляет собой решение кризисного менеджера об объединении отделов соответственно первого или второго вида. Если type = 3, то требуется определить, работают ли в одном отделе сотрудники x и y. Обратите внимаие, что x может равняться y в запросе любого типа.

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

На каждый запрос типа 3 выведите «YES» или «NO» (без кавычек), в зависимости от того, работают ли в одном отделе соответствующие люди.

Примеры
Входные данные
8 6
3 2 5
1 2 5
3 2 5
2 4 7
2 1 2
3 1 7
Выходные данные
NO
YES
YES