#include<bits/stdc++.h>
using namespace std;
int n,m;
long long js=1;
struct Node{
queue<int>x,y;
bool bj=0,pd=0;
}a[101][101];
int p1[4]={1,-1,0,0},p2[4]={0,0,-1,1};
queue<int>xx,yy;
void bfs(int x1,int y1)
{
a[x1][y1].bj=1;
while(!a[x1][y1].x.empty())
{
if(!a[a[x1][y1].x.front()][a[x1][y1].y.front()].pd)
js++;
a[a[x1][y1].x.front()][a[x1][y1].y.front()].pd=1;
for(int i=1;i<=3;i++)
{
if(a[x1][y1].x.front()>=0&&a[x1][y1].x.front()<=n&&a[x1][y1].y.front()>=0&&a[x1][y1].y.front()<=n&&!a[a[x1][y1].x.front()][a[x1][y1].y.front()].bj&&a[a[x1][y1].x.front()+p1[i]][a[x1][y1].y.front()+p2[i]].bj&&a[x1][y1].x.front()+p1[i]>=1&&a[x1][y1].x.front()+p1[i]<=n&&a[x1][y1].y.front()+p2[i]>=1&&a[x1][y1].y.front()+p2[i]<=n)
{
xx.push(a[x1][y1].x.front());
yy.push(a[x1][y1].y.front());
a[a[x1][y1].x.front()][a[x1][y1].y.front()].bj=1;
}
}
a[x1][y1].x.pop();
a[x1][y1].y.pop();
}
for(int i=0;i<=3;i++)
{
if(!a[x1+p1[i]][y1+p2[i]].bj&&x1+p1[i]>=0&&x1+p1[i]<=n&&y1+p2[i]>=0&&y1+p2[i]<=n&&a[x1+p1[i]][y1+p2[i]].pd)
{
a[x1+p1[i]][y1+p2[i]].bj=1;
xx.push(x1+p1[i]);
yy.push(y1+p2[i]);
}
}
}
void read(int &x)
{
int f=1;
x=0;
char ch=getchar();
while((ch>'9'||ch<'0')&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x*=10;
x+=ch-'0';
ch=getchar();
}
x*=f;
}
int main()
{
read(n);
read(m);
for(int i=1;i<=m;i++)
{
int x1,y1,x2,y2;
read(x1);
read(y1);
read(x2);
read(y2);
a[x1][y1].x.push(x2);
a[x1][y1].y.push(y2);
}
a[1][1].bj=1;
a[1][1].pd=1;
a[1][1].bj=1;
xx.push(1);
yy.push(1);
while(!xx.empty())
{
bfs(xx.front(),yy.front());
xx.pop();
yy.pop();
}
cout<<js;
return 0;
}