#include <iostream>
#include <queue>
#include <stdio.h>
int arr[1001][1001];
bool vi[1001];
bool vi2[1001];
int n, m;
void dfs(int v) {
std::queue<int> q;
q.push(v);
vi[v] = 1;
while (!q.empty()) {
int news = q.front();
q.pop();
for (int i = 1;i <= n;i++) {
if (arr[news][i] && !vi[i]) {
q.push(i);
vi[i] = 1;
}
}
}
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 0;i < m;i++) {
int a, b;
scanf("%d %d", &a, &b);
arr[a][b] = 1;
arr[b][a] = 1;
}
int cnt = 0;
for (int i = 1;i <= n;i++) {
if (!vi[i]) {
dfs(i);
cnt++;
}
}
printf("%d", cnt);
}