#include <iostream>
#include <vector>
#include <algorithm> // for sort
using namespace std;
vector<int> ke[1001];
bool visited[1001];
void DFS(int u){
visited[u] = true;
for(int v : ke[u]){
if(!visited[v]){
DFS(v);
}
}
}
int main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < m; i++){
int x, y;
cin >> x >> y;
ke[x].push_back(y);
ke[y].push_back(x);
}
for(int i = 1; i <= n; i++){
sort(ke[i].begin(), ke[i].end());
}
int dem = 0;
for(int i = 1; i <= n; i++){
if(!visited[i]){
DFS(i);
dem++;
}
}
cout << dem;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPiAvLyBmb3Igc29ydAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IGtlWzEwMDFdOwpib29sIHZpc2l0ZWRbMTAwMV07Cgp2b2lkIERGUyhpbnQgdSl7CiAgICB2aXNpdGVkW3VdID0gdHJ1ZTsKICAgIGZvcihpbnQgdiA6IGtlW3VdKXsKICAgICAgICBpZighdmlzaXRlZFt2XSl7CiAgICAgICAgICAgIERGUyh2KTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCl7CiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIGtlW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICBrZVt5XS5wdXNoX2JhY2soeCk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgc29ydChrZVtpXS5iZWdpbigpLCBrZVtpXS5lbmQoKSk7CiAgICB9CiAgICBpbnQgZGVtID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpZighdmlzaXRlZFtpXSl7CiAgICAgICAgICAgIERGUyhpKTsKICAgICAgICAgICAgZGVtKys7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBkZW07CiAgICByZXR1cm4gMDsKfQo=