from collections import deque, defaultdict
n, m = map(int, input().split())
MAP = defaultdict(list)
for _ in range(m):
a, b = map(int, input().split())
MAP[a].append(b)
INF = int(1e9)
ans = INF
visited = [0] * (n + 1)
for start in range(1, n + 1):
if visited[start]:
continue
length = [-1] * (n + 1)
q = deque([start])
length[start] = 0
temp = [start]
flag = 0
break_out = 0
while q and not break_out:
u = q.popleft()
for v in MAP[u]:
temp.append(v)
if length[v] == -1:
length[v] = length[u] + 1
q.append(v)
elif v == start:
ans = min(ans, length[u] + 1)
flag = 1
break_out = 1
break
if not flag:
for t in temp:
visited[t] = 1
print(ans if ans != INF else -1)
感覺已經很優化了(也有可能是我太菜)