/*
	将所有区间存在数组中,并以左端点升序排序
	排序后将重叠部分合并
	依次减去合并后的区间长度,便是最终结果
*/

#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;
}