#include<bits/stdc++.h>
using namespace std;
vector<int> Nodes;
long long res = 0;
// string s = "000";
void backtracking(vector<pair<int,int>> &line,int &m,int idx){
// cout<<s<<endl;
if(Nodes[0] == 0) {
// cout<<"HIT: "<<s<<endl;
res++;
return;
}
vector<int> CurNodes = Nodes;
for(int i =idx;i<m;i++){
//line有选与不选两种选择
int bg = line[i].first,ed = line[i].second;
for(int j = bg; j<=ed; j++){
if(Nodes[j] == 0) continue;
Nodes[j]--;
Nodes[0]--;
}
// s[i] = '1';
// cout<<"Ndoes: "<< Nodes[0]<<endl;
backtracking(line,m,i+1);
// s[i] = '0';
Nodes = CurNodes;//回溯
}
}
int main(){
int n,m;
while (cin>>n>>m)
{
Nodes.resize(n+1,2);
Nodes[0] = 2*n;//Nodes[0]保存需要遍历的节点数量
res = 0;
vector<pair<int,int>> line(m);
for (size_t i = 0; i < m; i++)
{
int st,ed;
cin>>st>>ed;
line[i]={st,ed};
}
backtracking(line,m,0);
cout<<res<<endl;
}
return 0;
}