<aside> 💡 최단경로를 사용하기 위해 학생을 노드로 보고, 비교가 가능한 경우를 링크로 봄!

1차원리스트로 처리하는 다익스트라와 다르게 2차원리스트로 처리하는 플로이드워셜 알고리즘 사용!

</aside>

#무한
INF = int(1e9)

# 학생 수(노드 수), 비교 수(간선 수) 입력
n, m = map(int, input().split())

# 2차원 리스트 만들고 모든 값을 무한으로 초기화
graph = [[INF]* (n+1) for _ in range(n+1)]

# 자기 자신에서 자기 자신으로 가는 비용 0으로 초기화
for a in range(1, n+1):
  for b in range(1, n+1):
    if a == b :
      graph[a][b] = 0

# 정보를 입력받아서 그 값으로 초기화
for _ in range(m):
  a, b = map(int, input().split())
  graph[a][b] = 1 # 비용은 1로 설정

# 점화식에 따른 플로이드 워셜 알고리즘
for k in range(1, n+1):
  for a in range(1, n+1):
    for b in range(1, n+1):
      graph[a][b] = min(graph[a][b], graph[a][b] + graph[k][b])

result = 0

# 한 명씩 도달 가능한지(성적 비교가 가능한지) 체크
for i in range(1, n+1):
  count = 0
  for j in range(1, n+1):
    if graph[i][j] != INF or graph[j][i] !=INF:
      count+=1
  if count ==n: # 모두 비교 가능하면
    result +=1

print(result)