// Here is a C++17 solution to this problem.

#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;
typedef vector<vi> vvi;

int n, m; vvi G;
vector<bool> visited;
vi visits;

void dfs(int u) {
    visited[u] = true;
    visits.push_back(u);

    for (auto &v : G[u]) {
        if (!visited[v]) dfs(v);
    }
}

int main(void) {
    cin >> n >> m;
    G = vvi(n, vi(0));
    for (int i = 0; i < m; i++) {
        int u, v; cin >> u >> v; u--; v--;
        G[u].push_back(v); G[v].push_back(u);
    }

    int count = 0;
    visited = vector<bool>(n, false);
    for (int u = 0; u < n; u++) {
        visits = vi(0); 
        if (!visited[u]) {
            dfs(u);
            bool isCycle = true;
            for (auto &u : visits) isCycle = isCycle && G[u].size() == 2;
            count += isCycle;
        }
    }
    cout << count;

    return 0;
}