1 #include<iostream>
2 #include<string>
3 #include<queue>
4 #include<stack>
5 #include<vector>
6 #include<map>
7 #include<cstdio>
8 #include<cstdlib>
9 #include<algorithm>
10 #include<set>
11 #include<iomanip>
12 #include<cstring>
13 #include<cmath>
14 #include<limits>
15 using namespace std;
16
17 #define au auto
18 #define debug(i) cout<<"debug: "<<i<<endl
19 #define mfor(i,a,b) for(register int i=(a);i<=(b);i++)
20 #define mrep(i,a,b) for(register int i=(a);i>=(b);i--)
21 #define LLL __int128
22 #define Re register
23 #define il inline
24 #define mem(a,b) memset(a,(b),sizeof(a))
25 typedef pair<int, int> intpair;
26 typedef long long int LL;
27 const int INF = 0x3f3f3f3f;
28 const long long int INFLL = 0x3f3f3f3f3f3f3f3f;
29
30 const int maxn = 51;
31 int dis[maxn][maxn];
32 bool h[maxn][maxn][50];
33 int n, m;
34
35 int main()
36 {
37 cin >> n >> m;
38 mem(dis, 0x3f);
39 mfor(i, 1, m)
40 {
41 int a, b;
42 cin >> a >> b;
43 dis[a][b] = 1;
44 h[a][b][0] = true;
45 }
46 mfor(k, 1, 50)
47 {
48 mfor(i, 1, n)
49 {
50 mfor(j, 1, n)
51 {
52 mfor(l, 1, n)
53 {
54 if (h[i][j][k - 1] && h[j][l][k - 1])
55 {
56 h[i][l][k] = true;
57 dis[i][l] = 1;
58 }
59 }
60 }
61 }
62 }
63 mfor(k, 1, 50)
64 {
65 mfor(i, 1, n)
66 {
67 mfor(j, 1, n)
68 {
69 dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
70 }
71 }
72 }
73 cout << dis[1][n];
74 }