#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
vector<int>sum[10005];
//sum存储(x,y)的编号点亮(x2,y2)的编号的灯
map<int,map<int,int> >q,ff,ft;
//ft为是否能够到达(1,1)
//ff为是否被点亮
//q为(x,y)的编号
struct st{
int xx,yy;
}a[10005];
//a存储(x,y)的编号相对应的坐标
int id=0,ans=1;
//id为编号,ans为点亮的灯的数量
bool flag[10005];
//flag标记编号点有没有来过
int d1[4]={0,0,1,-1},d2[4]={1,-1,0,0};
bool st(int x,int y){
for(int i=0;i<4;i++){
int newx=x+d1[i],newy=y+d2[i];
if(newx>n||newx<1||newy>n||newy<1){
continue;
}
if(ff[newx][newy]==1&&ft[newx][newy]==2){
ft[x][y]=2;
return 1;
}
}
return 0;
}
void dij(int x,int y){
for(int i=1;i<=id;i++){
flag[i]=0;
}
priority_queue<int,vector<int>,greater<int> >s;
s.push(1);
flag[1]=1;
ff[x][y]=1;
ft[x][y]=2;
while(s.empty()==0){
int now=s.top();
// cout<<now<<endl;
s.pop();
for(int i=0;i<sum[now].size();i++){
int num=sum[now][i]; //记录开的灯的编号
if(ff[a[num].xx][a[num].yy]==0){
ff[a[num].xx][a[num].yy]=1;
ans++;
}
// cout<<num<<endl;
if(st(a[num].xx,a[num].yy)==1){
if(flag[num]==0){
flag[num]=1;
s.push(num);
}
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[++id].xx=i,a[id].yy=j;
q[i][j]=id;
}
}
for(int i=1;i<=m;i++){
int x,y,x2,y2;
cin>>x>>y>>x2>>y2;
sum[q[x][y]].push_back(q[x2][y2]);
// cout<<q[x][y]<<" "<<q[x2][y2]<<endl;
}
for(int i=1;i<=id;i++){
sort(sum[i].begin(),sum[i].end());
}
dij(1,1);
// for(int i=1;i<=id;i++){
// for(int j=0;j<sum[i].size();j++){
// cout<<sum[i][j]<<" ";
// }
// cout<<endl;
// }
cout<<ans<<endl;
return 0;
}