#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);
}