F. Прогулка
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Вам дан ориентированный граф с n вершинами и m рёбер, каждое из которых имеет определённый вес.

В нём могут быть кратные рёбра и петли, кроме того, граф может быть несвязным.

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

Обратите внимание, ребра пути не обязательно должны идти последовательно во входных данных.

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

В первой строке содержатся два целых числа n и m (1 ≤ n ≤ 100000,1 ≤ m ≤ 100000) — число вершин и рёбер в графе соответственно.

После этого следует m строк, в i-й из которых содержится три целых числа, разделённых пробелами — ai, bi и wi (1 ≤ ai, bi ≤ n, 0 ≤ wi ≤ 100000), обозначающих, что есть ребро от вершины ai до вершины bi с весом wi.

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

Выведите одно целое число в одной строке — максимальное количество рёбер в пути.

Примеры
Входные данные
3 3
3 1 3
1 2 1
2 3 2
Выходные данные
2
Входные данные
5 5
1 3 2
3 2 3
3 4 5
5 4 0
4 5 8
Выходные данные
3
Примечание

Ответ на первый пример — 2: .

Заметим, что нельзя выбрать путь , потому что ребро появляется в вводе раньше, чем два других ребра, и поэтому его нельзя выбрать после того, как было выбрано какое-то из двух других рёбер.

Во втором примере оптимально выбрать 1-е, 3-е и 5-е ребра, чтобы получить оптимальный ответ: .