#include <bits/stdc++.h>

using namespace std;

int n, m, deg[100010] = {0};
struct edge {
	int v, next;
}e[100010 << 1];
int head[100010], cnt = 0;
void adde(int u, int v) {
	e[cnt].v = v;
	e[cnt].next = head[u];
	head[u] = cnt++;
}

int d4[100010], d6[100010];
bool solve() {
	d4[0] = d6[0] = 0;
	for(int i = 1; i <= n; ++i) {
		if(deg[i] & 1) return false;
		if(deg[i] >= 4) d4[++d4[0]] = i;
		if(deg[i] >= 6) d6[++d6[0]] = i;
	}
	
	if(d6[0]) return true;
	if(d4[0] >= 3) return true;
	if(d4[0] != 2) return false;
	
	int ret = 0;
	for(int i = head[d4[1]], u, v; ~i; i = e[i].next) {
		u = e[i].v; v = d4[1];
		while(deg[u] == 2) {
			int temp = e[head[u]].v != v ? e[head[u]].v : e[e[head[u]].next].v;
			v = u;
			u = temp;
		}
		if(u == d4[2]) ++ret;
	}
	return ret == 2;
}

int main() {
	memset(head, -1, sizeof head);
	
	scanf("%d%d", &n, &m);
	for(int i = 1, u, v; i <= m; ++i) {
		scanf("%d%d", &u, &v);
		adde(u, v);
		adde(v, u);
		++deg[u]; ++deg[v];
	}
	
	puts(solve() ? "Yes" : "No");
	
	return 0;
}