#include <iostream>
#include <vector>
using namespace std;
int n, m;
int cnt = 0;
vector<pair<int, int>> line;
// DFS:idx当前处理到第几条线,s每个点覆盖次数
void DFS(int idx, vector<int> s) {
// 遍历完所有线,判断是否满足条件
if (idx == m) {
for (int num : s) {
if (num < 2) return;
}
cnt++;
return;
}
// 不选当前线
DFS(idx + 1, s);
// 选当前线(复制一份temp,不修改原s)
vector<int> temp = s;
int l = line[idx].first;
int r = line[idx].second;
for (int i = l - 1; i < r; i++) {
temp[i]++;
}
DFS(idx + 1, temp);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
line.resize(m);
for (int i = 0; i < m; i++) {
cin >> line[i].first >> line[i].second;
}
vector<int> s(n, 0);
DFS(0, s);
cout << cnt << endl;
return 0;
}