#include using namespace std; using ll = int; using ull = unsigned long long; using ld = long double; using pll = pair; using vll = vector; using vpll = vector; #define pb push_back #define FOR(i, m, n) for (ll i(m); i < n; ++i) #define REP(i, n) FOR(i, 0, n) #define F(n) REP(i, n) #define FF(n) REP(j, n) #define FFF(n) REP(k, n) #define D(x) cerr << "D(" << #x << "): " << x << endl #define EPS (1e-10) #define INF (1LL<<61) #define CL(A, I) memset(A, I, sizeof(A)) #define all(x) begin(x), end(x) #define IN(n) ll n; cin >> n; #define x first #define y second void ga(ll N, ll* A){F(N) cin >> A[i];} const int MX = 1000007; ll ft[MX]; ll get (ll en) { ll sum=0; for(;en;en-=en&-en) sum+=ft[en]; return sum; } ll get(int st, int en) { return get(en)-get(st-1); } void inc(int i, ll val) { for(;i=val) return binary(s,m,val); else return binary(m+1,e,val); } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); while(1){ ll M,N; cin>>M>>N; if(!cin)break; ll K=N/2; vector a; F(N) { ll x,y; cin>> x>>y; a.pb({x,y}); } long long ret=INF; FFF(4){ for(auto& i:a) i={M-i.y-1,i.x}; CL(ft,0); setxs,ys; unordered_map mx,my; unordered_map mx2,my2; for(auto &i: a) { xs.insert(i.x);ys.insert(i.y); } ll ii=1; for(auto &i:xs) { mx[ii]=i; mx2[i]=ii++;} ii=1; for(auto &i:ys) { my[ii]=i; my2[i]=ii++; } sort(a.begin(),a.end()); vector cols(mx.size()+1); for(auto &i:a) { cols[mx2[i.x]].pb(my2[i.y]); } ll r=0; for(auto &v:cols) { for(auto &t:v) inc(t,1); ll a=binary(1,MX-1,K); //D(mx[r]);D(my[a]);D(K);D(get(1,a+1)); if(get(1,a)!=K){r++;continue;} long long s = (mx[r]+1)*(1LL+my[a]); // D(s); if (ret > s) { ret=s; } r++; } } cout<<(ret==INF||N%2 ? -1 : ret)<