#include <bits/stdc++.h>
#include <cstdio>
#include <iostream>
#include <cmath>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#define TRACE 1
#define tcout TRACE && cout
//#include <ctime>
//#include <cstdlib>
using namespace std;
vector <long long> g[100010];
bool vis[1100][110000];
int ans;
bool flag;
void dfs(int n)
{
for (int i = 0; i < g[n].size(); i++)
{
if(vis[n][g[n][i]] == true)
{
flag = true;
// cout << " " << n << " " << g[n][i] << endl;
vis[n][g[n][i]] = false;
vis[g[n][i]][n] = false;
dfs(g[n][i]);
}
}
return ;
}
int main()
{
int n , m;
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int u , v;
cin >> u >> v;
vis[u][v] = true;
vis[v][u] = true;
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = 1; i <= n; i++)
{
flag = false;
if (g[i].size() != 0)
{
dfs(i);
if (flag == true)
{
ans++;
}
}
}
cout << ans << endl;
return 0;
}