#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<bool> visited;
vector<vector<int>> edges;
void dfs(int start) {
visited[start] = true;
for(const auto& neigh : edges[start]) {
if(!visited[neigh]) {
dfs(neigh);
}
}
}
int main()
{
freopen("dfs.in", "r", stdin);
freopen("dfs.out", "w", stdout);
scanf("%d %d", &n, &m);
edges.resize(n + 1);
visited.assign(n + 1, false);
for(int i = 1; i <= m; ++i) {
int from, to;
scanf("%d %d", &from, &to);
edges[from].push_back(to);
edges[to].push_back(from);
}
int connectedComponents = 0;
for(int i = 1; i <= n; ++i) {
if(!visited[i]) {
dfs(i);
++connectedComponents;
}
}
cout << connectedComponents << endl;
return 0;
}