#include <vector>
#include <iostream>
using namespace std;
int n, m; // орой болон ирмэгийн тоо
int comp; // бидний хариу буюу компонентийн тоо
bool vis[200000]; // ирсэн ирээгүйг хадгалах массив
vector<int> adj[200000]; // графын мэдээллийг хадгалах вектор
void dfs(int u) {
// одоо бид u гэсэн орой дээр ирж байгаа тул
vis[u] = 1; // ирсэн гэж тэмдэглэнэ
for(int v:adj[u]) {
// v:adj[u] гэдэг нь v гэсэн тоо нь adj[u] гэсэн векторт байгаа
// бүх элемэнтийн утгыг авна гэсэн үг ба эхнээс нь дуустал явна
if( !vis[v] ) {
// v гэсэн орой дээр өмнө нь ямар нэгэн байдлаар очоогүй бол
// энэ оройгоос цааш явах ёстой гэсэн үг
dfs(v);
}
}
}
int main() {
cin >> n >> m;
while( m-- ) {
int u, v; // u, v 2 орой хоорондоо шууд ирмэгээр
// холбогддог гэсэн үг
cin >> u >> v;
adj[u].push_back( v );
adj[v].push_back( u );
}
for(int i = 1; i <= n; i++) {
if( !vis[i] ) {
// Энэ нь I-р орой дээр өмнө ямар нэгэн байдлаар очиж чадаагүй
// гэсэн үг тул энэ оройг агуулсан нэг компонент байх нь
// тодохрой тул компонентын тоо нь 1-р нэмэгдэнэ
comp++;
dfs( i ); // энэ оройтой ямар нэгэн байдлаар холбогдсон бүх
// орой нь энэ компонетэд орно.
}
}
cout << comp << endl; // хариуг хэвлэнэ.
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoJCglpbnQgbiwgbTsJLy8g0L7RgNC+0Lkg0LHQvtC70L7QvSDQuNGA0LzRjdCz0LjQudC9INGC0L7QvgoJaW50IGNvbXA7CS8vINCx0LjQtNC90LjQuSDRhdCw0YDQuNGDINCx0YPRjtGDINC60L7QvNC/0L7QvdC10L3RgtC40LnQvSDRgtC+0L4KCWJvb2wgdmlzWzIwMDAwMF07CS8vINC40YDRgdGN0L0g0LjRgNGN0Y3Qs9Kv0LnQsyDRhdCw0LTQs9Cw0LvQsNGFINC80LDRgdGB0LjQsgoJdmVjdG9yPGludD4gYWRqWzIwMDAwMF07CS8vINCz0YDQsNGE0YvQvSDQvNGN0LTRjdGN0LvQu9C40LnQsyDRhdCw0LTQs9Cw0LvQsNGFINCy0LXQutGC0L7RgAoKdm9pZCBkZnMoaW50IHUpIHsKCS8vINC+0LTQvtC+INCx0LjQtCB1INCz0Y3RgdGN0L0g0L7RgNC+0Lkg0LTRjdGN0YAg0LjRgNC2INCx0LDQudCz0LDQsCDRgtGD0LsKCXZpc1t1XSA9IDE7IC8vINC40YDRgdGN0L0g0LPRjdC2INGC0Y3QvNC00Y3Qs9C70Y3QvdGNCgoJZm9yKGludCB2OmFkalt1XSkgewoJCS8vIHY6YWRqW3VdINCz0Y3QtNGN0LMg0L3RjCB2INCz0Y3RgdGN0L0g0YLQvtC+INC90YwgYWRqW3VdINCz0Y3RgdGN0L0g0LLQtdC60YLQvtGA0YIg0LHQsNC50LPQsNCwCgkJLy8g0LHSr9GFINGN0LvQtdC80Y3QvdGC0LjQudC9INGD0YLQs9GL0LMg0LDQstC90LAg0LPRjdGB0Y3QvSDSr9CzINCx0LAg0Y3RhdC90Y3RjdGBINC90Ywg0LTRg9GD0YHRgtCw0Lsg0Y/QstC90LAJCSAKCQlpZiggIXZpc1t2XSApIHsKCQkJLy8gdiDQs9GN0YHRjdC9INC+0YDQvtC5INC00Y3RjdGAINOp0LzQvdOpINC90Ywg0Y/QvNCw0YAg0L3RjdCz0Y3QvSDQsdCw0LnQtNC70LDQsNGAINC+0YfQvtC+0LPSr9C5INCx0L7QuwoJCQkvLyDRjdC90Y0g0L7RgNC+0LnQs9C+0L7RgSDRhtCw0LDRiCDRj9Cy0LDRhSDRkdGB0YLQvtC5INCz0Y3RgdGN0L0g0q/QswoJCQlkZnModik7CgkJfQoJfQp9CgppbnQgbWFpbigpIHsKCWNpbiA+PiBuID4+IG07IAoJd2hpbGUoIG0tLSApIHsKCQlpbnQgdSwgdjsJLy8gdSwgdiAyINC+0YDQvtC5INGF0L7QvtGA0L7QvdC00L7QviDRiNGD0YPQtCDQuNGA0LzRjdCz0Y3RjdGAIAoJCQkJCS8vINGF0L7Qu9Cx0L7Qs9C00LTQvtCzINCz0Y3RgdGN0L0g0q/QswoJCWNpbiA+PiB1ID4+IHY7CgkJYWRqW3VdLnB1c2hfYmFjayggdiApOwoJCWFkalt2XS5wdXNoX2JhY2soIHUgKTsKCX0KCglmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWlmKCAhdmlzW2ldICkgewoJCQkvLyDQrdC90Y0g0L3RjCBJLdGAINC+0YDQvtC5INC00Y3RjdGAINOp0LzQvdOpINGP0LzQsNGAINC90Y3Qs9GN0L0g0LHQsNC50LTQu9Cw0LDRgCDQvtGH0LjQtiDRh9Cw0LTQsNCw0LPSr9C5CgkJCS8vINCz0Y3RgdGN0L0g0q/QsyDRgtGD0Lsg0Y3QvdGNINC+0YDQvtC50LMg0LDQs9GD0YPQu9GB0LDQvSDQvdGN0LMg0LrQvtC80L/QvtC90LXQvdGCINCx0LDQudGFINC90YwgCgkJCS8vINGC0L7QtNC+0YXRgNC+0Lkg0YLRg9C7INC60L7QvNC/0L7QvdC10L3RgtGL0L0g0YLQvtC+INC90YwgMS3RgCDQvdGN0LzRjdCz0LTRjdC90Y0KCQkJY29tcCsrOwoJCQlkZnMoIGkgKTsJLy8g0Y3QvdGNINC+0YDQvtC50YLQvtC5INGP0LzQsNGAINC90Y3Qs9GN0L0g0LHQsNC50LTQu9Cw0LDRgCDRhdC+0LvQsdC+0LPQtNGB0L7QvSDQsdKv0YUgCgkJCQkJCS8vINC+0YDQvtC5INC90Ywg0Y3QvdGNINC60L7QvNC/0L7QvdC10YLRjdC0INC+0YDQvdC+LgoKCQl9Cgl9Cgljb3V0IDw8IGNvbXAgPDwgZW5kbDsgLy8g0YXQsNGA0LjRg9CzINGF0Y3QstC70Y3QvdGNLgoJcmV0dXJuIDA7Cn0=