#include<stdio.h>
#include<iostream>
using namespace std;
const int N=100005;
const int M=1e9+7;
int n,m,i,j,l,r,x,y,ans,f[N][17];bool p[N];
inline void read(int&a){char c;while(!(((c=getchar())>=‘0‘)&&(c<=‘9‘)));a=c-‘0‘;while(((c=getchar())>=‘0‘)&&(c<=‘9‘))(a*=10)+=c-‘0‘;}
int get(int x,int y)
{
if(f[x][y]==x) return x;else return f[x][y]=get(f[x][y],y);
}
int log(int x)
{
int k=0;
while(x>1) k++,x>>=1;return k;
}
void solve(int l,int r,int p)
{
if(get(l,p)==get(r,p)) return;
f[f[l][p]][p]=f[r][p];
if(!p) return;
p--;
solve(l,r,p);solve(l+(1<<p),r+(1<<p),p);
}
int main()
{
read(n),read(m);
for(j=0;(1<<j)<=n;j++)
for(i=1;i+(1<<j)-1<=n;i++) f[i][j]=i;
for(i=1;i<=m;i++)
{
read(x),read(y),read(l),read(r);
int p=log(y-x+1);
solve(x,l,p);solve(y-(1<<p)+1,r-(1<<p)+1,p);
}
ans=9;
p[get(1,0)]=1;
for(i=2;i<=n;i++) if(!p[get(i,0)]) p[get(i,0)]=1,ans=10LL*ans%M;
cout<<ans;
return 0;
}