#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
bool viz[100005];
vector<int> vec[100005];
void dfs(int nod,vector<int> vecin[] ) {
viz[nod]=true;
for ( int vec: vecin[nod]) {
if(!viz[vec]) {
dfs(vec,vecin);
}
}
}
int main() {
int conex=0;
ifstream fin("dfs.in");
ofstream fout("dfs.out");
int n,m;
fin>>n>>m;
for (int i=0;i<m;i++) {
int nod,vecin;
fin>>nod>>vecin;
vec[vecin].push_back(nod);
vec[nod].push_back(vecin);
}
for (int i=1;i<=n;i++) {
if (!viz[i]) {
conex++;
dfs(i,vec);
}
}
fout << conex<<"\n";
}