import sys
n,m = map(int,input().split())
graph = [[] for _ in range(5001)]
for _ in range(m):
    u,v = map(int,input().split())
    graph[u].append(v)
    graph[v].append(u)
# 我的思路是
# 从起点向外辐射,判断终点是否为起点的邻接点
# 如果是停止循环
# 如果不是将点集更换为起点的邻边
# 再以新的点集向外辐射
# 每辐射一次distance+1
# 我需要两个点集,一个用来存储已经辐射过的点
# 一个用来存储当前需要检查的点
# 如果当前需要检查的点为空,那么就停止循环
a = set(graph[1])
b = {1}
distance = 0
while a:
    distance += 1 
    b = a|b
    if n in a:
        print(distance)
        sys.exit()
    for point in a:
        a = a|set(graph[point])
    a = a - b
print(-1)