import java.io.*;
import java.util.*;
class Main {
static int N, E;
static Node[] nodes;
while((line = br.readLine()) != null) {
int a[] = new int[2];
parseIntArr(line.toCharArray(), a);
N = a[0]; E = a[1];
nodes = new Node[N+1];
ArrayList<Node> d3 = new ArrayList<Node>();
for(int i = 1; i <= N; i++) nodes[i] = new Node();
boolean found = false;
for(int i = 0; i < E; i++) {
if(!found) parseIntArr(br.readLine().toCharArray(), a);
else {
br.readLine();
continue;
}
nodes[a[0]].edges.add(a[1]);
nodes[a[1]].edges.add(a[0]);
if(nodes[a[0]].edges.size() == 4) found = true;
else if(nodes[a[1]].edges.size() == 4) found = true;
else if(nodes[a[0]].edges.size() == 3) d3.add(nodes[a[0]]);
else if(nodes[a[1]].edges.size() == 3) d3.add(nodes[a[1]]);
}
if(found
) System.
out.
println("YES"); else {
for(Node n : d3) {
if(walk(n, false)) {
found = true;
break;
}
}
if(found
) System.
out.
println("YES"); else System.
out.
println("NO"); }
}
}
static boolean walk(Node n, boolean foundFirst) {
if(n.visited) return false;
else {
n.visited = true;
if(n.edges.size() == 3) {
if(foundFirst) return true;
else foundFirst = true;
}
boolean result = walk(nodes[i], foundFirst);
if(result) return true;
}
}
return false;
}
public static void parseIntArr(char[] arr, int[] target)
{
int i = 0;
int acc = -1;
for(char ch :arr)
{
if(ch == ' ')
{
if(acc!= -1)
{
target[i++] = acc;
acc = -1;
}
}
else if(acc == -1)
acc = ch - '0';
else
acc = acc * 10 + (ch - '0');
}
if(acc != -1)
target[i] = acc;
}
}
class Node {
boolean visited = false;
ArrayList<Integer> edges = new ArrayList<Integer>(4);
}