INF = 1e18 from collections import deque N, M = map(int, input().split()) G = [list() for _ in range(N)] for i in range(M): u, v = map(int, input().split()) u -= 1 v -= 1 G[u].append(v) dist = [INF] * N dist[0] = 0 que = deque([0]) while que: pos = que.popleft() for nex in G[pos]: if dist[nex] == INF: dist[nex] = dist[pos] + 1 que.append(nex) dist_from_N = [INF] * N dist_from_N[-1] = 0 que = deque([N - 1]) while que: pos = que.popleft() for nex in G[pos]: if dist_from_N[nex] == INF: dist_from_N[nex] = dist_from_N[pos] + 1 que.append(nex) dist_from_N_1 = [INF] * N dist_from_N_1[-2] = 0 que = deque([N - 2]) while que: pos = que.popleft() for nex in G[pos]: if dist_from_N_1[nex] == INF: dist_from_N_1[nex] = dist_from_N_1[pos] + 1 que.append(nex) ans1 = dist[-2] + dist_from_N_1[-1] + dist_from_N[0] ans2 = dist[-1] + dist_from_N[-2] + dist_from_N_1[0] ans = min(ans1, ans2) if ans >= INF: ans = -1 print(ans)