#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("dfs.in");
ofstream fout ("dfs.out");
void dfs(const vector<vector<int>>& graf, const int n, vector<int>& f, const int nod) {
f[nod]=1;
for (auto vecin : graf[nod]) {
if (!f[vecin])
dfs(graf,n,f,vecin);
}
}
int nr_comp_con(const vector<vector<int>> &graf, const int n) {
int cnt = 0;
vector<int> f(n+1, 0);
for (int i = 1; i <= n; i++) {
if (!f[i]) {
dfs(graf,n,f,i);
cnt++;
}
}
return cnt;
}
int main() {
int n,m;
fin >> n >> m;
vector<vector<int>> graf(n+1);
for (int i = 0; i < m; i++) {
int x,y;
fin >> x >> y;
graf[x].push_back(y);
graf[y].push_back(x);
}
fout << nr_comp_con(graf,n);
return 0;
}