//
// Created by Alex on 10/20/2026.
//
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void dfs(int n, vector<bool>& vizitat , vector<vector<int>> v) {
vizitat[n]=true;
for (int nod : v[n]) {
if (!vizitat[nod]) {
dfs(nod,vizitat,v);
}
}
}
int main() {
ifstream fin("dfs.in");
ofstream fout("dfs.out");
int n,m;
fin>>n>>m;
vector<vector<int>> v(n + 1);
vector<bool> vizitat(n + 1, false);
int s=0;
for (int i=0;i<m;i++) {
int x,y;
fin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for (int i=0;i<n;i++) {
if (!vizitat[i]) {
dfs(i,vizitat,v);
s++;
}
}
fout<<s;
}