#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define llu ull
#define db double
#define fl float
#define us unsiged
#define fi first
#define se second
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define pbp(a,b) pb(mp(a,b))
#define int_inf 0x3f3f3f3f
#define INT_INF INT_MAX
#define UINT_INF UINT_MAX
#define LL_INF LLONG_MAX
#define ULL_INF ULONG_LONG_MAX
#define Const const int
#define pi pair<int,int>
#define fin(name) freopen(name,"r",stdin)
#define fout(name) freopen(name,"w",stdout)
#define read() fastRead()
#define print(a) fastPrint(a)
inline int fastRead(){
char chr=getchar();
int absData=0, isLowerThanZero=1;
while(chr<'0'||chr>'9'){
if(chr=='-') isLowerThanZero=-1;
chr=getchar();
}
while(chr>='0'&&chr<='9')
absData=(absData<<1)+(absData<<3)+(chr^48),
chr=getchar();
return absData*isLowerThanZero;
}
long long readll(){
char c = getchar();
long long x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
inline void fastPrint(int number){
if(number<0) putchar('-'), number=-number;
if(number>9) fastPrint(number/10);
putchar(number%10+'0');
}
/*****-------------------------------------*****/
Const N = 300;
int n, num[N][N], mch[N*N], vis[N*N];
double ans=0;
int ddd[4][2]={1,2,2,1,2,-1,1,-2};
bool mp[N][N];
vector<int> g[N*N];
inline bool dfs(int x, int y){
if(vis[x]==y) return false;
vis[x]=y;
for(auto i : g[x])
if(mch[i]==0 || dfs(mch[i], y)){
mch[i] = x;
return true;
}
return false;
}
int main(){
n=read(), ans=0;
int m=read();
while(m--){
int tmp1=read(), tmp2=read();
mp[tmp1][tmp2]=1;
}
for(int i=1, tot=0;i<=n;i++)
for(int j=1;j<=n;j++){
num[i][j]=++tot, ans+=!mp[i][j];
if(mp[i][j]) continue;
for(int k=0;k<4;k++)
if(i>ddd[k][0] && j>ddd[k][1] && (j-ddd[k][1]<=n)
&& !mp[i-ddd[k][0]][j-ddd[k][1]])
g[num[i][j]].pb(num[i-ddd[k][0]][j-ddd[k][1]]),
g[num[i-ddd[k][0]][j-ddd[k][1]]].pb(num[i][j]);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) ans-=dfs(num[i][j],1)/2.0,
memset(vis, 0, sizeof vis);
cout<<ans<<endl;
return 0;
}
///////////////////
其中一个点本地测5秒