#include <cstdio>
#include <iostream>
#include <vector>
class point
{
public:
std::vector<int> conn;
};
int main()
{
int n = 0, m = 0;
while( scanf( "%d %d\n", &n, &m ) == 2 )
{
point p[10000];
int aux =0, aux2= 0;
for ( register int i = 0; i < m; i++ )
{
scanf("%d %d\n", &aux, &aux2 );
p[aux -1 ].conn.push_back( aux2 -1 );
p[aux2-1].conn.push_back( aux-1 );
}
bool deg = false;
int state = 0;
std::vector<int> deg3;
for ( register int i = 0; i < n; i++ )
{
if ( p[i].conn.size() == 0 )
{
state = -1;
break;
}
else if ( p[i].conn.size() > 3 )
{
state = 1;
break;
}
else if ( p[i].conn.size() == 3 )
{
deg = true;
deg3.push_back( i );
}
}
switch( state )
{
case -1 :
std::cout << "No" << std::endl;
break;
case 1 :
std::cout << "Yes" << std::endl;
break;
default:
{
if ( !deg || deg3.size() < 2 )
{
std::cout << "No" << std::endl;
}
else
{
bool bunny = false;
for ( register unsigned int i = 0; i < deg3.size(); i++ )
{
int len = 0;
for ( register unsigned int j = 0; j < deg3.size(); j++ )
{
len = 0;
for ( register unsigned int k = 0; k < 2; k++ )
{
for ( register unsigned int q = 0; q < 2; q++ )
{
if ( p[deg3[i]].conn[k] == p[deg3[j]].conn[q] )
{
len++;
}
}
}
}
if ( len <= 1 )
{
bunny = true;
break;
}
}
if ( bunny )
std::cout << "Yes" << std::endl;
else
std::cout << "No" << std::endl;
}
} break;
}
}
return 0;
}