import java.util.*;
public class Main {
public static boolean[] visited = new boolean[5001];
public static HashMap<Integer, ArrayList<Integer>> edges= new HashMap<>();
public static int[] length = new int[5001];
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int target = input.nextInt();
int edgeNum = input.nextInt();
int ver1;
int ver2;
Arrays.fill(length,50001);
for(int i = 0; i < edgeNum; i++){
ver1 = input.nextInt();
ver2 = input.nextInt();
update(ver1,ver2);
update(ver2,ver1);
}
length[1] = 0;
setLength(target);
}
public static void update(int ver1, int ver2){
if(edges.containsKey(ver1)){
edges.get(ver1).add(ver2);
}else{
ArrayList<Integer> list = new ArrayList<>();
list.add(ver2);
edges.put(ver1,list);
}
}
public static void setLength(int target){
int start;
int index = 0;
while(index < 5000){
start = getStart();
if(start == -1){
break;
}
if(start == target){
System.out.println(length[target]);
return;
}else{
updateLength(start);
}
index++;
}
System.out.println(-1);
}
public static int getStart(){
int start = -1;
int min = 50001;
for(int i = 1; i < 5001; i++){
if(!visited[i] && length[i] < min){
min = length[i];
start = i;
}
}
if(start!=-1){
visited[start] = true;
}
return start;
}
public static void updateLength(int start){
for(int i = 1; i < 5001; i++){
if(!visited[i] && edges.get(start).contains(i)){
if(length[i] > length[start] + 1){
length[i] = length[start]+1;
}
}
}
}
}