#include <fstream>
#include <vector>
#include <bits/stdc++.h>
std::vector<std::vector<int>> graf;
std::bitset<100000>nod_folosit;
std::ifstream input_file("dfs.in");
std::ofstream output_file("dfs.out");
void dfs(int nod) {
nod_folosit[nod]=1;
for (int urmator:graf[nod]) {
if (!nod_folosit[urmator])
dfs(urmator);
}
}
//
// void bfs(int nod) {
//
// }
int main() {
int n,m,x,y,no_componente_conexe=0;
input_file>>n>>m;
graf.assign(n+1,std::vector<int>());
for (int i=1;i<=m;i++) {
input_file>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
}
for (int i=1;i<=n;i++) {
if (!nod_folosit[i]) {
no_componente_conexe++;
dfs(i);
}
}
output_file<<no_componente_conexe;
return 0;
}