from collections import deque N,M = list(map(int,input().split())) edge = [[] for _ in range(N)] for _ in range(M): u,v = list(map(int,input().split())) u -= 1;v -= 1 edge[u].append(v) INF = 10**18 def f(start): dist = [INF for _ in range(N)] q = deque([(0,start)]) while(q): v,now = q.popleft() if(dist[now] <= v):continue dist[now] = v for i in edge[now]: q.append((v+1,i)) return dist from_0 = f(0) from_l = f(N-1) from_ll = f(N-2) ans = min(from_0[N-1] + from_l[N-2] + from_ll[0], from_0[N-2] + from_ll[N-1] + from_l[0]) print(ans if ans < INF else -1)