#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=10010;
int n,m;
int match[N];
bool st[N];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
//map<pair<int,int>,bool> mp;
bool mp[N][N];
int h[N],ne[4*N],e[4*N],idx;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool dfs(int x){
for(int i=h[x];i!=-1;i=ne[i]){
int j=e[i];
if(!st[j]){
st[j]=1;
if((match[j]==-1)||dfs(match[j])){
match[j]=x;
return true;
}
}
}
return false;
}
int
main(){
memset(h,-1,sizeof h);
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int a,b;scanf("%d%d",&a,&b);
//mp[make_pair(a-1,b-1)]=true;
mp[a-1][b-1]=1;
}
//if(mp[make_pair(1,1)]) cout<<"sd"<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if((i+j)&1) continue;
if(mp[i][j]) continue;
for(int k=0;k<4;k++){
int x=i+dx[k],y=j+dy[k];
if(x<0||x>=n||y<0||y>=n) continue;
if(mp[x][y]) continue;
add(i*n+j,x*n+y);//add(x*n+y,i*n+j);
}
}
}
memset(match,-1,sizeof match);
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(!((i+j)&1)){
if(!mp[i][j]){
memset(st,false,sizeof st);
if(dfs(i*n+j)) ans++;
}
}
}
}
printf("%d\n",ans);
return 0;
}