import java.util.Scanner;
import java.util.*;

/**
* 参考deepseek:https://chat.deepseek.com/share/m17g1h95v6nn9w8hhk
*/
public class Main {
  // 方法1:使用区间合并思想
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 while 处理多个 case
        // 注意 hasNext 和 hasNextLine 的区别
        int L = in.nextInt();// 总数为L+1
        int M = in.nextInt();// 地铁施工区域数

        // 1. 按区间起点排序
        int[][] intervals = new int[M][2];
        while (in.hasNextInt()) {
            for (int i = 0; i < M; i++) {
                for (int j = 0; j < 2; j++) {
                    // j:0,1,表示左右两个端点
                    intervals[i][j] = in.nextInt();
                }
            }
        }
        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));

        // 2. 合并重叠区间
        List<int[]> merged = new ArrayList<>();
        int[] current = intervals[0].clone();// 第0行的两个端点
        // [0,1,2,3,4,5,6,7,8,9,10,......,L]
        // [0,1]            |
        // [0         5]    |--->合并为[0,5]
        // [  1    3]       |
        //              [6,   9]
        // merged结果:[[0,5],[6,9]]
        for (int i = 1; i < intervals.length;
                i++) { // 从第1行的两个端点开始遍历
            if (intervals[i][0] <= current[1]) { // 有重叠,合并区间
                current[1] = Math.max(current[1],
                                      intervals[i][1]); //比较两行数据右端点哪个更大,取较大者
            } else {
                merged.add(current);// 无重叠,保存当前区间,开始新区间
                current = intervals[i].clone();
            }
        }
        merged.add(current);
        // 3.计算总覆盖长度
        int totalCovered = 0;
        for (int[] interval : merged) {
            int len = interval[1] - interval[0] + 1;
            totalCovered += len;
        }

        // 4.计算剩余长度
        int totalLength = L + 1;
        int remaining = totalLength - totalCovered;
        System.out.println(remaining);
    }
}