from atcoder.maxflow import MFGraph
n, m = map(int, input().split())
XY = [tuple(map(int, input().split())) for _ in range(n)]

C = set()
for x, y in XY:
    C.add(x)
    C.add(y)
C = list(C)
D = {C[i]: i for i in range(len(C))}
k = len(C)

mf = MFGraph(n+k+2)
s = n+k
g = n+k+1
for i in range(n):
    mf.add_edge(s, i, 1)
    x, y = XY[i]
    x, y = D[x], D[y]
    mf.add_edge(i, n+x, 1)
    mf.add_edge(i, n+y, 1)

for i in range(k):
    mf.add_edge(n+i, g, 1)

ans = mf.flow(s, g)

print(ans)