#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
const int N = 1e5 + 10;
int h[N], n, m, tot;
int a, b;
struct node {
int v, c, ne;
} e[N];
void add(int u, int v, int c) {
tot++;
e[tot] = (node) {
v, c, h[u]
};
h[u] = tot;
}
int ff, rr, d[N], v[N], zz, l;
queue<int>q;
void spfa() {
q.push(1);
v[1] = 1;
memset(d, 24, sizeof(d));
d[1] = 0;
while (!q.empty()) {
ff = q.front();
q.pop();
v[ff] = 0;
for (int i = h[ff]; i; i = e[i].ne) {
rr = e[i].v;
if (d[rr] > d[ff] + e[i].c) {
d[rr] = d[ff] + e[i].c;
if (!v[rr])
v[rr] = 1, q.push(rr);
}
}
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1, k; i <= m; ++i) {
scanf("%d%d", &a, &b);
add(a, b, 1);
}
spfa();
cout << d[n];
return 0;
}