#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <stack>
using namespace std;
ifstream fin("dfs.in");
ofstream fout("dfs.out");
const int NMAX = 1e5;
vector<int> L[NMAX - 1];
int viz[NMAX + 1];
void dfs(int node)
{
viz[node] = 1;
for (int neighbor : L[node]) {
if (!viz[neighbor]) {
dfs(neighbor);
}
}
}
int main()
{
int n, m;
fin >> n >> m;
for (int i = 0; i < m; ++i) {
int u, v;
fin >> u >> v;
L[u].push_back(v);
L[v].push_back(u);
}
int connectedComponents = 0;
for (int i = 1; i <= n; ++i) {
if (!viz[i]) {
dfs(i);
connectedComponents++;
}
}
fout << connectedComponents << '\n';
return 0;
}