#include using namespace std; const int MAX_N = 2000020; map mp; int parent[MAX_N]; int r[MAX_N]; void make_set(int a) { parent[a] = a; r[a] = 0; } int find_set(int a) { if (a == parent[a]) { return a; } return parent[a] = find_set(parent[a]); } void unite(int a, int b) { a = find_set(a); b = find_set(b); if (r[a] > r[b]) { parent[b] = a; } else if (r[b] > r[a]) { parent[a] = b; } else { parent[b] = a; r[a]++; } } int main () { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; int united = 0; int cur = 0; for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; if (mp.find(u) == mp.end()) { make_set(cur); mp[u] = cur++; } if (mp.find(v) == mp.end()) { make_set(cur); mp[v] = cur++; } u = find_set(mp[u]); v = find_set(mp[v]); if (u != v) { unite(u, v); united++; } } cout << n - united << endl; return 0; }