// 宽搜可以用来解决最小路径问题importjava.util.*;classMain{// 图的初始化操作staticintN=100010;staticint[] h =newint[N], e =newint[N], ne =newint[N];staticint idx =0;staticint n;staticint[] d =newint[N];// 图的插入操作staticvoidinsert(int a,int b){
e[idx]= b;
ne[idx]= h[a];
h[a]= idx ++;}// 宽搜,其实有模板,用队列的方式staticintbfs(){Arrays.fill(d,-1);Queue<Integer> queue =newArrayDeque<>();
queue.offer(1);
d[1]=0;while(!queue.isEmpty()){int t = queue.poll();for(int i = h[t]; i !=0; i = ne[i]){int j = e[i];if(d[j]==-1){
d[j]= d[t]+1;
queue.offer(j);}}}return d[n];}publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);
n = sc.nextInt();int m = sc.nextInt();for(int i =0; i < m; i ++){insert(sc.nextInt(), sc.nextInt());}System.out.println(bfs());}}
// 宽搜可以用来解决最小路径问题import java.util.*;class Main{ // 图的初始化操作 static int N = 100010; static int[] h = new int[N], e = new int[N], ne = new int[N]; static int idx = 0; static int n; static int[] d = new int[N]; // 图的插入操作 static voi