#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{
	int s,t,nxt;
}e[200005];
int last[100005],e_cnt;
void ins(int a,int b){
	e[e_cnt]=(edge){a,b,last[a]};
	last[a]=e_cnt++;
}
int d[100005],p[100005],cnt;
int fa[100005];
bool dfs(int x){
	if(x==p[1])return false;
	for(int i=last[x];i!=-1;i=e[i].nxt)if(e[i].t!=fa[x]){
		if(e[i].t==p[2])return true;
		fa[e[i].t]=x;
		if(dfs(e[i].t))return true;
	}
	return false;
}
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	memset(last,-1,sizeof(last));
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		ins(x,y);
		ins(y,x);
		d[x]++; d[y]++;
	}
	bool ok=1,fl=0;
	for(int i=1;i<=n;i++){
		if(d[i]&1)ok=0;
		if(d[i]>2)p[++cnt]=i;
		if(d[i]>4)fl=1;
	}
	if(ok&&(cnt>2||fl||(cnt==2&&dfs(p[2]))))puts("Yes");
	else puts("No");
}