#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int rlen=1<<18|1;
inline char gc(){
	static char buf[rlen],*ib,*ob;
	(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));
	return ib==ob?-1:*ib++;
}
inline int read(){
	int ans=0;
	char ch=gc();
	while(!isdigit(ch))ch=gc();
	while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
	return ans;
}
const int N=1e5+5;
int n,m,cnt=0,s,t;
vector<int>e[N];
bool dfs(int p,int fa){
	for(ri i=0,v;i<e[p].size();++i){
		if((v=e[p][i])==fa||v==t)continue;
		if(v==s)return 1;
		if(dfs(v,p))return 1;
	}
	return 0;
}
inline void check(){
	s=t=-1;
	for(ri i=1;i<=n;++i)if(e[i].size()==4)~s?t=i:s=i;
	puts(dfs(s,0)?"Yes":"No");
}
int main(){
	n=read(),m=read();
	for(ri i=1,u,v;i<=m;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
	bool f=1,f3=0;
	for(ri i=1;i<=n;++i)f&=!(e[i].size()&1),cnt+=e[i].size()/2-1,f3|=e[i].size()>4;
	if(!f||cnt<2)return puts("No"),0;
	if(f3||cnt>2)return puts("Yes"),0;
	check();
	return 0;
}