枚举 · 例8扩展-校门外的树:hard
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}本题为困难版本,与简单版本的区别仅在数据的范围上。
\hspace{15pt}某校大门外长度为 l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 l 的位置;数轴上的每个整数点,即 0,1,2,\dots,l 都种有一棵树。
\hspace{15pt}由于马路上有一些区域要用来建地铁,现在要把这些区域中的树(包括区域端点处的两棵树)移走。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。
\hspace{15pt}你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入描述:

\hspace{15pt}第一行输入两个整数 l, n \left( 1 \leqq l \leqq 10^9;\ 1 \leqq n \leqq 10^5 \right) 代表马路长度、移植的区域数目。
\hspace{15pt}此后 n 行,第 i 行输入两个整数 l_i, r_i \left( 1 \leqq l_i \leqq r_i \leqq l \right) 代表第 i 个移植区域的起始、中止坐标。

输出描述:

\hspace{15pt}在一行上输出一个整数,代表马路上剩余的树的数目。
示例1

输入

复制
500 3
150 300
100 200
470 471

输出

复制
298

说明

\hspace{15pt}在这个样例中,留下 1 \sim 99301 \sim 469472 \sim 500 的树,共 100 + 169 + 29 = 298 棵。