#include <bits/stdc++.h>
using namespace std;
template <typename T>
T sqr(T x) {
  return x * x;
}
template <typename T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
const int MAXN = (int)1e5 + 10;
int n, m;
int ans;
vector<int> d[MAXN];
bool us[MAXN];
bool flag = false;
void dfs(int x, int pr) {
  us[x] = true;
  for (int i = 0; i < d[x].size(); i++)
    if (!us[d[x][i]])
      dfs(d[x][i], x);
    else if (d[x][i] != pr)
      flag = true;
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    d[x].push_back(y);
    d[y].push_back(x);
  }
  for (int i = 1; i <= n; i++)
    if (!us[i]) {
      flag = false;
      dfs(i, 0);
      if (!flag) ans++;
    }
  cout << ans;
}
