#include using namespace std; #define DEBUG(x) cout <<'>'<<#x<<':'<< endl; #define ll long long #define vvi vector > #define vi vector #define INT 1000000000 int main(int argc, char** argv) { ios_base::sync_with_stdio(false); int N, M; while (cin >> N >> M) { vector > orch(N, vector(N, 0)); vvi ld(N + 2, vector(N + 2, 0)); vvi lu(N + 2, vector(N + 2, 0)); vvi rd(N + 2, vector(N + 2, 0)); vvi ru(N + 2, vector(N + 2, 0)); int x, y; for (int i = 0; i < M; i++) { cin >> x >> y; orch[x][y] = 1; } if (M % 2 == 1) {cout << -1 << endl; continue;} M /= 2; long long res = N * N; for (long long i = 1; i <= N; i++) { for (long long j = 1; j <= N; j++) { // cout << i << " " << j << endl; lu[i][j] = lu[i - 1][j] + lu[i][j - 1] - lu[i - 1][j - 1] + orch[i - 1][j - 1]; // cout << lu[i][j] << endl; ru[i][N + 1 - j] = ru[i - 1][N + 1 - j] + ru[i][N - j + 2] - ru[i - 1][N - j + 2] + orch[i - 1][N - j]; // cout << ru[i][N + 1 - j] << endl; ld[N - i + 1][j] = ld[N - i + 2][j] + ld[N - i + 1][j - 1] - ld[N - i + 2][j - 1] + orch[N - i][j - 1]; rd[N - i + 1][N - j + 1] = rd[N - i + 2][N - j + 1] + rd[N - i + 1][N - j + 2] - rd[N - i + 2][N - j + 2] + orch[N - i][N - j]; if (lu[i][j] >= M || ld[N - i + 1][j] >= M || ru[i][N + 1 - j] >= M || rd[N - i + 1][N - j + 1] >= M) { // cout << lu[i][j] << endl; // cout << ru[i][N + 1 - j] << endl; // cout << i << " " << j << endl; // cout << N - i + 1 << " " << j << endl; // cout << i << " " << N -j + 1 << endl; // cout << N - i + 1 << " " << N - j + 1 << endl; res = min(res, i * j); } } } cout << res << endl; } return 0; }