/*
将所有区间存在数组中,并以左端点升序排序
排序后将重叠部分合并
依次减去合并后的区间长度,便是最终结果
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct qujian{
int left, right;
qujian(int a, int b) : left(a), right(b){}
};
bool cmp(qujian a, qujian b) {
return a.left < b.left;
}
int main()
{
int L, M;
while(cin >> L >> M) {
vector<qujian> movedtree;
for(int i = 0; i < M; i++) {
int left, right;
cin >> left >> right;
movedtree.push_back(qujian(left, right));
}
sort(movedtree.begin(), movedtree.end(), cmp); // 以左端点升序排序
for(int k = 1; k < movedtree.size(); k++) { // 将重叠部分合并
if(movedtree[k].left <= movedtree[k - 1].right) {
movedtree[k].left = movedtree[k - 1].left;
if(movedtree[k-1].right > movedtree[k].right) {
movedtree[k].right = movedtree[k-1].right;
}
movedtree[k - 1].left = 0;
movedtree[k - 1].right = -1;
}
}
L += 1;
for(int g = 0; g < movedtree.size(); g++) { // 依次减去合并后的区间长度,便是最终结果
L -= movedtree[g].right - movedtree[g].left + 1;
}
cout << L << endl;
}
return 0;
}