import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String line = cin.nextLine(); String[] splitedLine = line.split(" "); int n = Integer.parseInt(splitedLine[0]); if (n < 5) { /* 最低5頂点なければ長さ5の単純閉路は作れない */ exit(false); } int m = Integer.parseInt(splitedLine[1]); if (m < 5) { /* 最低5辺なければ長さ5の単純閉路は作れない */ exit(false); } List[] sideListArray = new List[n]; for (int i = 0; i < m; i++) { line = cin.nextLine(); splitedLine = line.split(" "); int a = Integer.parseInt(splitedLine[0]) - 1; int b = Integer.parseInt(splitedLine[1]) - 1; if (sideListArray[a] == null) { sideListArray[a] = new ArrayList(); } sideListArray[a].add(b); if (sideListArray[b] == null) { sideListArray[b] = new ArrayList(); } sideListArray[b].add(a); } cin.close(); if (sideListArray[0].size() < 2) { /* 頂点1から異なる2頂点への辺が存在しない場合、頂点1を含む単純閉路は作れない */ exit(false); } for (int i = 0; i < sideListArray[0].size(); i++) { for (int j = i + 1; j < sideListArray[0].size(); j++) { /* 頂点1からたどれる2点a,bを取り出す */ int a = sideListArray[0].get(i); int b = sideListArray[0].get(j); for (int c : sideListArray[a]) { /* aからたどれる頂点のうち、1でもbでもない点cを取り出す */ if (c == 0 || c == b) { continue; } for (int d : sideListArray[b]) { /* bからたどれる頂点のうち、1でもaでもcでもない点dを取り出す */ if (d == 0 || d == a || d == c) { continue; } if (sideListArray[c].contains(d)) { /* cからdへとつながる辺があれば、1-a-c-d-b-1という長さ5の単純閉路が存在していることになる */ exit(true); } } } } } /* 全探索を終えてもみつからなければ、無し。 */ exit(false); } private static void exit(boolean result) { if (result) { System.out.println("YES"); } else { System.out.println("NO"); } System.exit(0); } }