#include <bits/stdc++.h>
using namespace std;
int D[500][500];
int D2[500][500];
vector<int> G[500];
vector<int> G2[500];
int main() {
  int n, m, v, u;
  int ind = 2;
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    for (int g = 0; g < n; ++g) {
      D[i][g] = 100000000;
      D2[i][g] = 100000000;
    }
  }
  for (int i = 0; i < m; ++i) {
    cin >> v >> u;
    if ((v == 1 && u == n) || (v == n && u == 1)) {
      ind = 1;
    }
    v--;
    u--;
    G[v].push_back(u);
    G[u].push_back(v);
    D[v][u] = 1;
    D[u][v] = 1;
  }
  for (int i = 0; i < n; ++i) {
    for (int g = 0; g < n; ++g) {
      if (D[i][g] != 1 && i != g) {
        G2[i].push_back(g);
        G2[g].push_back(i);
        D2[i][g] = 1;
        D2[g][i] = 1;
      }
    }
  }
  if (ind == 2) {
    for (int i = 0; i < n; ++i) {
      for (int g = 0; g < n; ++g) {
        for (int h = 0; h < n; ++h) {
          if (D[g][h] > (D[g][i] + D[i][h])) {
            D[g][h] = D[g][i] + D[i][h];
            D[h][g] = D[h][i] + D[i][g];
          }
        }
      }
    }
    if (D[0][n - 1] == 100000000) {
      cout << "-1";
      return 0;
    }
    cout << D[0][n - 1];
    return 0;
  }
  if (ind == 1) {
    for (int i = 0; i < n; ++i) {
      for (int g = 0; g < n; ++g) {
        for (int h = 0; h < n; ++h) {
          if (D2[g][h] > D2[g][i] + D2[i][h]) {
            D2[g][h] = D2[g][i] + D2[i][h];
            D2[h][g] = D2[g][i] + D2[i][h];
          }
        }
      }
    }
    if (D2[0][n - 1] == 100000000) {
      cout << "-1";
      return 0;
    }
    cout << D2[0][n - 1];
    return 0;
  }
  return 0;
}
