import sys
sys.setrecursionlimit(10**6)
fast_input = sys.stdin.readline
def dfs(node, adj_matrix, visited):
stack = [node]
while stack:
v = stack.pop()
if not visited[v]:
visited[v] = True
for neighbor in range(1, len(adj_matrix)):
if adj_matrix[v][neighbor] == 1 and not visited[neighbor]:
stack.append(neighbor)
# 입력 처리
N, M = map(int, fast_input().split())
adj_matrix = [[0] * (N + 1) for _ in range(N + 1)]
# 간선 정보 입력
for _ in range(M):
u, v = map(int, fast_input().split())
adj_matrix[u][v] = adj_matrix[v][u] = 1
visited = [False] * (N + 1)
component_count = 0
# 모든 정점에 대해 DFS 호출
for i in range(1, N + 1):
if not visited[i]:
dfs(i, adj_matrix, visited)
component_count += 1
print(component_count)