#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int MAX=1000000+10;
int K,n;
int x1[MAX],y1[MAX],x2[MAX],y2[MAX];
int tot;
pair<int,int> node[MAX];
int mm[MAX],dp[MAX],dp1[MAX],add[MAX];
int cmp(const pair<int,int>& a,const pair<int,int>& b)
{
return (LL)a.x*b.y<(LL)a.y*b.x;
}
void merge(int& a,int& b)
{
int g=__gcd(a,b);
a/=g;
b/=g;
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#endif
int i;
scanf("%d%d",&K,&n);
REP(i,1,n)
{
scanf("%d%d%d%d",x1+i,y1+i,x2+i,y2+i);
merge(x1[i],y1[i]);
merge(x2[i],y2[i]);
node[++tot]=mp(x1[i],y1[i]);
node[++tot]=mp(x2[i],y2[i]);
}
sort(node+1,node+tot+1,cmp);
tot=unique(node+1,node+tot+1)-node-1;
REP(i,1,tot)
mm[i]=i+1;
REP(i,1,n)
{
int L=lower_bound(node+1,node+tot+1,mp(x1[i],y1[i]),cmp)-node;
int R=lower_bound(node+1,node+tot+1,mp(x2[i],y2[i]),cmp)-node;
if(L>R)
swap(L,R);
mm[R]=min(mm[R],L);
add[L]++;
add[R+1]--;
}
for(i=tot-1;i>=1;--i)
mm[i]=min(mm[i+1],mm[i]);
for(i=1;i<=tot;++i)
add[i]+=add[i-1];
dp[0]=0;
for(int j=1;j<=K;++j)
{
for(i=1;i<=tot;++i)
dp1[i]=dp[mm[i]-1] + add[i];
for(i=1;i<=tot;++i)
{
dp[i]=max(dp[i], dp1[i] );
if(dp[i]<dp[i-1])
dp[i]=dp[i-1];
}
}
printf("%d\n",dp[tot]);
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGJpdHNldD4KI2luY2x1ZGU8ZnVuY3Rpb25hbD4KI2RlZmluZSB4IGZpcnN0CiNkZWZpbmUgeSBzZWNvbmQKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBSRVAoaSxsLHIpIGZvcigoaSk9KGwpOyhpKTw9KHIpOysrKGkpKQojZGVmaW5lIFJFUDIoaSxsLHIpIGZvcigoaSk9KGwpOyhpKSE9KHIpOysrKGkpKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgTEw7CnR5cGVkZWYgZG91YmxlIGxkOwoKY29uc3QgaW50IE1BWD0xMDAwMDAwKzEwOwoKaW50IEssbjsKaW50IHgxW01BWF0seTFbTUFYXSx4MltNQVhdLHkyW01BWF07CgppbnQgdG90OwpwYWlyPGludCxpbnQ+IG5vZGVbTUFYXTsKaW50IG1tW01BWF0sZHBbTUFYXSxkcDFbTUFYXSxhZGRbTUFYXTsKCmludCBjbXAoY29uc3QgcGFpcjxpbnQsaW50PiYgYSxjb25zdCBwYWlyPGludCxpbnQ+JiBiKQp7CiAgICByZXR1cm4gKExMKWEueCpiLnk8KExMKWEueSpiLng7Cn0KCnZvaWQgbWVyZ2UoaW50JiBhLGludCYgYikKewogICAgaW50IGc9X19nY2QoYSxiKTsKICAgIGEvPWc7CiAgICBiLz1nOwp9CgppbnQgbWFpbigpCnsKI2lmbmRlZiBPTkxJTkVfSlVER0UKLy8gICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pO2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwojZW5kaWYKICAgIGludCBpOwogICAgc2NhbmYoIiVkJWQiLCZLLCZuKTsKICAgIFJFUChpLDEsbikKICAgIHsKICAgICAgICBzY2FuZigiJWQlZCVkJWQiLHgxK2kseTEraSx4MitpLHkyK2kpOwogICAgICAgIG1lcmdlKHgxW2ldLHkxW2ldKTsKICAgICAgICBtZXJnZSh4MltpXSx5MltpXSk7CiAgICAgICAgbm9kZVsrK3RvdF09bXAoeDFbaV0seTFbaV0pOwogICAgICAgIG5vZGVbKyt0b3RdPW1wKHgyW2ldLHkyW2ldKTsKICAgIH0KICAgIHNvcnQobm9kZSsxLG5vZGUrdG90KzEsY21wKTsKICAgIHRvdD11bmlxdWUobm9kZSsxLG5vZGUrdG90KzEpLW5vZGUtMTsKCiAgICBSRVAoaSwxLHRvdCkKICAgICAgICBtbVtpXT1pKzE7CiAgICBSRVAoaSwxLG4pCiAgICB7CiAgICAgICAgaW50IEw9bG93ZXJfYm91bmQobm9kZSsxLG5vZGUrdG90KzEsbXAoeDFbaV0seTFbaV0pLGNtcCktbm9kZTsKICAgICAgICBpbnQgUj1sb3dlcl9ib3VuZChub2RlKzEsbm9kZSt0b3QrMSxtcCh4MltpXSx5MltpXSksY21wKS1ub2RlOwogICAgICAgIGlmKEw+UikKICAgICAgICAgICAgc3dhcChMLFIpOwogICAgICAgIG1tW1JdPW1pbihtbVtSXSxMKTsKICAgICAgICBhZGRbTF0rKzsKICAgICAgICBhZGRbUisxXS0tOwogICAgfQogICAgZm9yKGk9dG90LTE7aT49MTstLWkpCiAgICAgICAgbW1baV09bWluKG1tW2krMV0sbW1baV0pOwogICAgZm9yKGk9MTtpPD10b3Q7KytpKQogICAgICAgIGFkZFtpXSs9YWRkW2ktMV07CiAgICBkcFswXT0wOwogICAgZm9yKGludCBqPTE7ajw9SzsrK2opCiAgICB7CiAgICAgICAgZm9yKGk9MTtpPD10b3Q7KytpKQogICAgICAgICAgICBkcDFbaV09ZHBbbW1baV0tMV0gKyBhZGRbaV07CiAgICAgICAgZm9yKGk9MTtpPD10b3Q7KytpKQogICAgICAgIHsKICAgICAgICAgICAgZHBbaV09bWF4KGRwW2ldLCBkcDFbaV0gKTsKICAgICAgICAgICAgaWYoZHBbaV08ZHBbaS0xXSkKICAgICAgICAgICAgICAgIGRwW2ldPWRwW2ktMV07CiAgICAgICAgfQogICAgfQogICAgcHJpbnRmKCIlZFxuIixkcFt0b3RdKTsKICAgIHJldHVybiAwOwp9Cg==