#include<iostream>
#include<cstring>
using namespace std;
const int N = 2e5 + 10;
int h[N], e[N], ne[N], n, m, idx, res;
bool f[N];
void connec(int x, int y)
{
e[idx] = y;
ne[idx] = h[x];
h[x] = idx++;
return;
}
void dfs(int i)
{
f[i] = 1;
for (int j = h[i]; j != -1; j = ne[j]) {
int v = e[j];
if (f[v]) continue;
dfs(v);
}
}
int main()
{
memset(h, -1, sizeof h);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y;
cin >> x >> y;
connec(x, y);
connec(y, x);
}
for (int i = 1; i <= n; i++) {
if (f[i]) continue;
res++;
dfs(i);
}
cout << res << endl;
return 0;
}