N,M = map(int,input().split()) from collections import defaultdict from collections import deque graph = defaultdict(list) for i in range(M): u,v = map(int,input().split()) graph[u-1].append(v-1) INF = 10**18 ######print(graph) def bfs(start,goal): dist = [INF]*(N) dist[start] = 0 quene = deque() quene.append(start) while quene: v=quene.popleft() for i in graph[v]: if dist[i] >= dist[v]+1: dist[i] = dist[v]+1 quene.append(i) continue return dist[goal] a = bfs(0,N-1) b = bfs(0,N-2) c = bfs(N-1,0) d = bfs(N-1,N-2) e = bfs(N-2,0) f = bfs(N-2,N-1) if INF <= (a+d+e) and INF <= (b+c+f): print(-1) exit() print(min((a+d+e),(b+c+f)))