#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N = 100003;
typedef pair<int, int> PIR;
vector<PIR> sec;
PIR s[N];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
s[i] = { a,b };
}
sort(s, s + m);
//合并区间
int l = s[0].first, r = s[0].second;
if (m == 1)
sec.push_back({ l,r });
for (int i = 1; i < m; i++)
{
if (s[i].second <= r)
continue;
if (s[i].second > r && s[i].first <= r)
r = s[i].second;
else
{
sec.push_back({ l,r });
l = s[i].first, r = s[i].second;
}
}
sec.push_back({ l,r });
//求最大连续无安排区间
int end = 1, res = 0;
for (int i = 0; i < sec.size(); i++)
{
res = max(res, sec[i].first - end);
end = sec[i].second;
}
res = max(res, n - end);
cout << res;
return 0;
}