#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,MOD=1e9+7;
int n,m,fa[N][50],cc[50],v[N],l1,l2,r1,r2,ans;
int find(int x,int y){
if(fa[x][y]==x)return x;
return fa[x][y]=find(fa[x][y],y);
}
long long g(int x){
if(x==0)return 1;
if(x==1)return 10;
long long y=g(x/2);
y=(y*y)%MOD;
if(n&1)y=(y*10)%MOD;
return y;
}
int main(){
cin>>n>>m;
cc[0]=1;
for(int i=1;i<=20;i++)cc[i]=cc[i-1]*2;
for(int j=0;cc[j]<=n;j++){
for(int i=1;i+cc[j]-1<=n;i++){
fa[i][j]=i;
}
}
for(int i=1;i<=m;i++){
cin>>l1>>r1>>l2>>r2;
int j=log(r1-l1+1)/log(2);
int fl1=find(l1,j),fl2=find(l2,j);
fa[fl1][j]=fl2;
int fr1=find(r1-cc[j]+1,j),fr2=find(r2-cc[j]+1,j);
fa[fr1][j]=fr2;
}
for(int j=log(n)/log(2);j>=1;j--){
for(int i=1;i+cc[j]-1<=n;i++){
int f=find(i,j);
if(f==i)continue;
int fa1=find(i,j-1),fa2=find(f,j-1);
fa[fa1][j-1]=fa2;
fa1=find(i+cc[j-1],j-1);
fa2=find(f+cc[j-1],j-1);
fa[fa1][j-1]=fa2;
}
}
for(int i=1;i<=n;i++){
int f=find(i,0);
if(!v[f]){
ans++;
v[f]=1;
}
}
cout<<(9*g(ans-1))%MOD;
return 0;
}