n, m = map(int, input().split()) from collections import deque #色iのスライムがどの箱に入っているかを管理 color = [[] for _ in range(n+1)] #箱iにどの色のスライムが入っているかを管理 box = [[] for _ in range(m+1)] for i in range(n): b, c = map(int, input().split()) box[b].append(c) color[c].append(b) #アクセス済みの箱を管理 dist = [-1] * (m+1) dist[0] = 0 ans = 0 for i in range(m+1): if dist[i] == -1: dist[i] = 0 d = deque() d.append(i) while d: v = d.popleft() for j in box[v]: for k in color[j]: if dist[k] != -1: continue dist[k] = dist[v] + 1 d.append(k) ans += 1 print(ans)