#include <bits/stdc++.h>
using namespace std;
const int N = 15, M = 110;
int n, m;
int sx, sy, tx, ty;
bool g[N][N];
bool st[N][N];
int ansmax=0;
int ansmin=100;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
void dfs(int x, int y, int t) {
if (x == tx && y == ty) {
ansmax = max(ansmax, t);
ansmin = min(ansmin, t);
return;
}
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && !g[nx][ny] && !st[nx][ny]) {
st[nx][ny] = true;
dfs(nx, ny, t + 1);
st[nx][ny] = false;
}
}
}
int main() {
cin >> n >> m;
sx = 1, sy = 1;
tx = n, ty = n;
while (m--) {
int x, y;
cin >> x >> y;
g[x][y] = true;
}
dfs(sx, sy, 0);
cout << ansmax - ansmin;
return 0;
}