#include <bits/stdc++.h>

const int MAX_N = int(1e5) + 10;

int n, m, deg[MAX_N];
bool vis[MAX_N];
std::vector<int> edges[MAX_N];

void dfs(int x) {
	vis[x] = 1;
	for (auto p : edges[x]) if (!vis[p]) {
		dfs(p);
	}
}

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; ++i) {
		int u, v;
		scanf("%d%d", &u, &v);
		++deg[u];
		++deg[v];
		edges[u].emplace_back(v);
		edges[v].emplace_back(u);
	}
	for (int i = 1; i <= n; ++i) {
		if (deg[i] & 1) {
			puts("No");
			return 0;
		}
	}
	int four = 0, p1 = 0, p2 = 0;
	for (int i = 1; i <= n; ++i) {
		if (deg[i] >= 6) {
			puts("Yes");
			return 0;
		}
		if (deg[i] == 4) {
			++four;
			if (!p1) p1 = i;
			else
				if (!p2) p2 = i;
		}
	}
	if (four > 2) {
		puts("Yes");
		return 0;
	}
	if (four == 2) {
		vis[p1] = 1;
		dfs(p2);
		for (int i = 1; i <= n; ++i) {
			if (!vis[i]) {
				puts("Yes");
				return 0;
			}
		}
	}
	puts("No");
}