#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<map>
#include<set>
#include<string>
#include<vector>
#include<cstring>
#include<stack>
#include<climits>

using namespace std;

int enemy[101][3];
int A[101];
int num[101];
int flag[101];
int visited[101];

bool dfs(int node,int start,int count){
    int i;
    if(node == start && visited[node] == 1)
        return true;
    visited[node]++;
    for(i=1;i<=num[node];i++){
        if(!visited[enemy[node][i]] || (enemy[node][i] == start && count >= 2))
            return dfs(enemy[node][i],start,count+1);
    }
    return false;
}

int cycle(int node,int start,int count){
    int i;
    flag[node] = 1;
    if(node == start && visited[node] == 1)
        return count;
    visited[node]++;
    for(i=1;i<=num[node];i++){
        if(!visited[enemy[node][i]] || (enemy[node][i] == start && count >= 2))
            return cycle(enemy[node][i],start,count+1);
    }
}

int main(){
    int m,n,i,j,a,b,k,temp,t1,t2,count;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++){
        scanf("%d%d",&a,&b);
        num[a]++;
        num[b]++;
        enemy[a][num[a]] = b;
        enemy[b][num[b]] = a;
    }
    t1 = 0;
    t2 = 0;
    temp = n;
    for(i=1;i<=n;i++){
        if(!flag[i] && num[i] == 2){
            if(dfs(i,i,0)){
                for(j=1;j<=n;j++) visited[j] = 0;
                count = cycle(i,i,0);
                n-=count;
                t1+=count/2;
                t2+=count/2;
            }
        }
    }
    t1+=n/2;
    t2+=n/2;
    printf("%d\n",temp-t1-t2);
    return 0;
}
