#include <iostream>
#include <vector>
using namespace std;
enum color_t {
WHITE, GRAY, BLACK // Вводим тип данных, отвечающий за цвет вершины
};
vector<color_t> color; // Список, в котором указаны цвета всех вершин
vector<vector<int>> crossroads; // Списки смежности перекрестков
bool is_track(int crossroad, int parent) { // Функция, проверяющая наличие круговой трассы
if(color[crossroad] == GRAY) return true; // Условие существования цикла
color[crossroad] = GRAY;
for(auto next_crossroad : crossroads[crossroad]) { // Переход в соседние вершины
if(parent != next_crossroad && is_track(next_crossroad, crossroad)) return true; // Вход в вершину, которую еще не входили
}
color[crossroad] = BLACK; // Если далее нет цикла, окрашиваем вершину в черный
return false;
}
int main() {
int n, m; // Количество перекрестков и дорог
cin >> n >> m;
crossroads.resize(n);color.resize(n, WHITE); // Окрашиваем все вершины в белый цвет
for(int i = 0; i < m; i++) {
int u, v; // Номер перекрестков, соединенных дорогой
cin >> u >> v;
u--;v--; // Так как по условию отсчёт начинается с первой вершины, вычитаем 1 для удобства
bool already_road = false; // Проверяем, не повторяется ли дорога
if(!crossroads[u].empty() && !crossroads[v].empty()) {
int number_of_neighbours = crossroads[u].size();
for(int j = 0; j < number_of_neighbours && already_road == false; j++) {
if(crossroads[u][j] == v) already_road = true;
}
}
if(!(already_road)) { // Проверка на повторение
crossroads[u].push_back(v); // Добавляем в список доступных перекрестков перекрестка u перекресток v
crossroads[v].push_back(u); // Аналогичные действия для перекрестка v, чтобы учесть возможность двусторонней езды
}
}
cout << (is_track(0, 0) ? "YES" : "NO"); // Запускаем функцию поиска круговой трассы с первого перекрестка и выводим ответ
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBjb2xvcl90IHsKCVdISVRFLCBHUkFZLCBCTEFDSyAvLyDQktCy0L7QtNC40Lwg0YLQuNC/INC00LDQvdC90YvRhSwg0L7RgtCy0LXRh9Cw0Y7RidC40Lkg0LfQsCDRhtCy0LXRgiDQstC10YDRiNC40L3Riwp9OwoKdmVjdG9yPGNvbG9yX3Q+IGNvbG9yOyAvLyDQodC/0LjRgdC+0LosINCyINC60L7RgtC+0YDQvtC8INGD0LrQsNC30LDQvdGLINGG0LLQtdGC0LAg0LLRgdC10YUg0LLQtdGA0YjQuNC9CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gY3Jvc3Nyb2FkczsgLy8g0KHQv9C40YHQutC4INGB0LzQtdC20L3QvtGB0YLQuCDQv9C10YDQtdC60YDQtdGB0YLQutC+0LIKCmJvb2wgaXNfdHJhY2soaW50IGNyb3Nzcm9hZCwgaW50IHBhcmVudCkgeyAvLyDQpNGD0L3QutGG0LjRjywg0L/RgNC+0LLQtdGA0Y/RjtGJ0LDRjyDQvdCw0LvQuNGH0LjQtSDQutGA0YPQs9C+0LLQvtC5INGC0YDQsNGB0YHRiwogICAgaWYoY29sb3JbY3Jvc3Nyb2FkXSA9PSBHUkFZKSByZXR1cm4gdHJ1ZTsgLy8g0KPRgdC70L7QstC40LUg0YHRg9GJ0LXRgdGC0LLQvtCy0LDQvdC40Y8g0YbQuNC60LvQsAoJY29sb3JbY3Jvc3Nyb2FkXSA9IEdSQVk7Cglmb3IoYXV0byBuZXh0X2Nyb3Nzcm9hZCA6IGNyb3Nzcm9hZHNbY3Jvc3Nyb2FkXSkgeyAvLyDQn9C10YDQtdGF0L7QtCDQsiDRgdC+0YHQtdC00L3QuNC1INCy0LXRgNGI0LjQvdGLCiAgICAgICAgaWYocGFyZW50ICE9IG5leHRfY3Jvc3Nyb2FkICYmIGlzX3RyYWNrKG5leHRfY3Jvc3Nyb2FkLCBjcm9zc3JvYWQpKSByZXR1cm4gdHJ1ZTsgLy8g0JLRhdC+0LQg0LIg0LLQtdGA0YjQuNC90YMsINC60L7RgtC+0YDRg9GOINC10YnQtSDQvdC1INCy0YXQvtC00LjQu9C4Cgl9Cgljb2xvcltjcm9zc3JvYWRdID0gQkxBQ0s7IC8vINCV0YHQu9C4INC00LDQu9C10LUg0L3QtdGCINGG0LjQutC70LAsINC+0LrRgNCw0YjQuNCy0LDQtdC8INCy0LXRgNGI0LjQvdGDINCyINGH0LXRgNC90YvQuQoJcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBuLCBtOyAvLyDQmtC+0LvQuNGH0LXRgdGC0LLQviDQv9C10YDQtdC60YDQtdGB0YLQutC+0LIg0Lgg0LTQvtGA0L7QswogICAgY2luID4+IG4gPj4gbTsKICAgIGNyb3Nzcm9hZHMucmVzaXplKG4pO2NvbG9yLnJlc2l6ZShuLCBXSElURSk7IC8vINCe0LrRgNCw0YjQuNCy0LDQtdC8INCy0YHQtSDQstC10YDRiNC40L3RiyDQsiDQsdC10LvRi9C5INGG0LLQtdGCCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHY7IC8vINCd0L7QvNC10YAg0L/QtdGA0LXQutGA0LXRgdGC0LrQvtCyLCDRgdC+0LXQtNC40L3QtdC90L3Ri9GFINC00L7RgNC+0LPQvtC5CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICB1LS07di0tOyAvLyDQotCw0Log0LrQsNC6INC/0L4g0YPRgdC70L7QstC40Y4g0L7RgtGB0YfRkdGCINC90LDRh9C40L3QsNC10YLRgdGPINGBINC/0LXRgNCy0L7QuSDQstC10YDRiNC40L3Riywg0LLRi9GH0LjRgtCw0LXQvCAxINC00LvRjyDRg9C00L7QsdGB0YLQstCwCiAgICAgICAgYm9vbCBhbHJlYWR5X3JvYWQgPSBmYWxzZTsgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8LCDQvdC1INC/0L7QstGC0L7RgNGP0LXRgtGB0Y8g0LvQuCDQtNC+0YDQvtCz0LAKICAgICAgICBpZighY3Jvc3Nyb2Fkc1t1XS5lbXB0eSgpICYmICFjcm9zc3JvYWRzW3ZdLmVtcHR5KCkpIHsKICAgICAgICAgICAgaW50IG51bWJlcl9vZl9uZWlnaGJvdXJzID0gY3Jvc3Nyb2Fkc1t1XS5zaXplKCk7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBudW1iZXJfb2ZfbmVpZ2hib3VycyAmJiBhbHJlYWR5X3JvYWQgPT0gZmFsc2U7IGorKykgewogICAgICAgICAgICAgICAgaWYoY3Jvc3Nyb2Fkc1t1XVtqXSA9PSB2KSBhbHJlYWR5X3JvYWQgPSB0cnVlOwogICAgICAgIAl9CiAgICAgICAgfQogICAgICAgIGlmKCEoYWxyZWFkeV9yb2FkKSkgeyAvLyDQn9GA0L7QstC10YDQutCwINC90LAg0L/QvtCy0YLQvtGA0LXQvdC40LUKICAgICAgICAgICAgY3Jvc3Nyb2Fkc1t1XS5wdXNoX2JhY2sodik7IC8vINCU0L7QsdCw0LLQu9GP0LXQvCDQsiDRgdC/0LjRgdC+0Log0LTQvtGB0YLRg9C/0L3Ri9GFINC/0LXRgNC10LrRgNC10YHRgtC60L7QsiDQv9C10YDQtdC60YDQtdGB0YLQutCwIHUg0L/QtdGA0LXQutGA0LXRgdGC0L7QuiB2CiAgICAgICAgICAgIGNyb3Nzcm9hZHNbdl0ucHVzaF9iYWNrKHUpOyAvLyDQkNC90LDQu9C+0LPQuNGH0L3Ri9C1INC00LXQudGB0YLQstC40Y8g0LTQu9GPINC/0LXRgNC10LrRgNC10YHRgtC60LAgdiwg0YfRgtC+0LHRiyDRg9GH0LXRgdGC0Ywg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQtNCy0YPRgdGC0L7RgNC+0L3QvdC10Lkg0LXQt9C00YsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IChpc190cmFjaygwLCAwKSA/ICJZRVMiIDogIk5PIik7IC8vINCX0LDQv9GD0YHQutCw0LXQvCDRhNGD0L3QutGG0LjRjiDQv9C+0LjRgdC60LAg0LrRgNGD0LPQvtCy0L7QuSDRgtGA0LDRgdGB0Ysg0YEg0L/QtdGA0LLQvtCz0L4g0L/QtdGA0LXQutGA0LXRgdGC0LrQsCDQuCDQstGL0LLQvtC00LjQvCDQvtGC0LLQtdGCCn0K