#include<bits/stdc++.h>
#include<atcoder/all>
#define chmin(x,y) (x) = min((x),(y))
#define chmax(x,y) (x) = max((x),(y))
#define ld long double
using namespace std;
using namespace atcoder;
using ll = long long;
const ll mod = 998244353;
using mint = modint998244353;
using Graph = vector<vector<int>>;
const vector<int> dx = {1,0,-1,0}, dy = {0,1,0,-1};

int main(){
  int N,M; cin >> N >> M;
  Graph G(N);
  while(M--){
    int u,v; cin >> u >> v;
    G[--u].push_back(--v);
  }
  
  // solve: BFS
  int ans = -1;
  queue<vector<int>> q;
  vector<vector<int>> d(N,vector<int>(4,2e9));
  q.push({0,0,0});
  d[0][0] = 0;
  
  while(!q.empty() && ans == -1){
    vector<int> v = q.front();
    int cur = v[0], dist = v[1], visit = v[2];
    q.pop();
    
    if(cur == 0 && visit == 3) ans = dist;
    else for (auto nxt : G[cur]){
      int visit_new = visit;
      if(nxt == N-2) visit_new |= 2;
      if(nxt == N-1) visit_new |= 1;
      
      if(d[nxt][visit_new] > dist + 1){
        q.push({nxt,dist+1,visit_new});
        d[nxt][visit_new] = dist + 1;
      }
    }
  }
  
  // output
  cout << ans << endl;
}