#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5,YL=1e9+7;
inline int MO(const int &x){return x>=YL?x-YL:x;}
inline int in(){int k;cin>>k;return k;}
inline int low(int x){return x&(-x);}
int n,tot;
typedef std::pair<int,int> P;
#define mk make_pair
std::vector<P>ans;
int head[N],to[N<<1],nxt[N<<1],cnt,vis[N],du[N],m;
multiset<int>G[N];
inline void add(int u,int v){G[u].insert(v),G[v].insert(u),++du[u],++du[v];}
void work()
{
	int sum=0;
	for(int i=1;i<=n;++i)
		if(!vis[i]&&G[i].size()==2)
		{
			multiset<int>::iterator itl,itr;
			itr=itl=G[i].begin();++itr;vis[i]=1;
			G[*itl].erase(G[*itl].find(i));
			G[*itr].erase(G[*itr].find(i));
			if(*itl==*itr)++sum;
			else G[*itl].insert(*itr),G[*itr].insert(*itl);
		}
	int mx=0,res=0;
	for(int i=1;i<=n;++i)
		if(!vis[i])++res,mx=std::max(mx,(int)G[i].size());
	sum+=mx>>1;if(res>=3||sum>=3)puts("Yes");
	else puts("No");
}
int main()
{
	ios::sync_with_stdio(0);cin>>n>>m;
	for(int i=1;i<=m;++i)add(in(),in());
	for(int i=1;i<=n;++i)if(du[i]&1)return puts("No"),0;
	work();
	return 0;
}
