#!/usr/bin/env python3 import sys def main(): N, M = map(int, input().split()) INF = 10 ** 16 from collections import deque def bfs(edges: "List[to]", start_node: int) -> list: q = deque() dist = [INF] * len(edges) q.append(start_node) dist[start_node] = 0 while q: now = q.popleft() for next in edges[now]: if dist[next] != INF: continue q.append(next) dist[next] = dist[now] + 1 return dist G = [[] for _ in range(N)] for _ in range(M): a, b = map(lambda i: int(i) - 1, input().split()) G[a].append(b) G[b].append(a) d = bfs(G, 0) ans = d[N - 1] print(-1 if ans == INF else ans) if __name__ == '__main__': main()