#include<bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m, Ans;
vector<int> dsk[N];
bool visited[N];
void DFS(int u) {
/// mảng visited[u] = 1 khi mà đã tới thăm đỉnh này
/// = 0 khi chưa thăm
visited[u] = true;
for (int v : dsk[u]) {
if (visited[v] == false)
DFS(v);
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
dsk[u].push_back(v);
dsk[v].push_back(u);
}
for (int i = 1; i <= n; i++)
if (visited[i] == false) {
DFS(i);
Ans++;
}
cout << Ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDEwMDAwNTsKCmludCBuLCBtLCBBbnM7CnZlY3RvcjxpbnQ+IGRza1tOXTsKYm9vbCB2aXNpdGVkW05dOwoKdm9pZCBERlMoaW50IHUpIHsKCiAgICAvLy8gbeG6o25nIHZpc2l0ZWRbdV0gPSAxIGtoaSBtw6AgxJHDoyB04bubaSB0aMSDbSDEkeG7iW5oIG7DoHkKICAgIC8vLyA9IDAga2hpIGNoxrBhIHRoxINtCgogICAgdmlzaXRlZFt1XSA9IHRydWU7CgogICAgZm9yIChpbnQgdiA6IGRza1t1XSkgewogICAgICAgIGlmICh2aXNpdGVkW3ZdID09IGZhbHNlKQogICAgICAgICAgICBERlModik7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgY2luID4+IG4gPj4gbTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGRza1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgZHNrW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgaWYgKHZpc2l0ZWRbaV0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgREZTKGkpOwogICAgICAgICAgICBBbnMrKzsKICAgICAgICB9CgogICAgY291dCA8PCBBbnM7Cn0K