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; } } } } }