#include<bits/stdc++.h>
using namespace std;
int N, M, cnt;
bool used[100010];
bool flag = true;
vector<int> G[100010];

void dfs(int s, int t){
    if(G[t].size() == 4) {
        cnt++;
        return;
    }
    used[t] = true;
    for(auto u : G[t]){
        if(!used[u]){
            dfs(s, u);
        }
    }
}

int main(){
    cin >> N >> M;
    for(int i = 0; i < M; i++){
        int a, b;
        cin >> a >> b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    int s = 0, f = 0;
    for(int i = 1; i <= N; i++){
        int si = G[i].size();
        if(si % 2 == 1) flag = false;
        if(si >= 6) s++;
        if(si == 4) f++;
    }
    if(s <= 0 && f <= 1) flag = false;
    if(s <= 0 && f == 2) {
        flag = false;
        for(int i = 0; i < N; i++){
            if(G[i].size() == 4){
                used[i] = true;
                for(auto u : G[i]){
                    dfs(i, u);
                }
                if(cnt < 4) flag = true;
                break;
            }
        }
    }
    cout << (flag ? "Yes" : "No") << endl;
    return 0;
}