#include <stdio.h> #include <string.h> const int MAX = 10000+10; int n, m; struct node { int l; int r; int sum; }a[MAX<<2]; void pushup(int root) { a[root].sum = a[root<<1].sum + a[root<<1|1].sum; } void build(int l, int r, int root) { a[root].l = l; a[root].r = r; a[root].sum = r - l + 1; if (l == r) { return; } int mid = (l + r)>>1; build(l, mid, root<<1); build(mid+1, r, root<<1|1); } void update(int l, int r, int root) { if (a[root].sum == 0) { return; } if (a[root].l == l && a[root].r == r) { a[root].sum = 0; return; } int mid = (a[root].l + a[root].r)>>1; if (r<=mid) { update(l, r, root<<1); } else if (l>mid) { update(l, r, root<<1|1); } else { update(l, mid, root<<1); update(mid+1, r, root<<1|1); } pushup(root); } int main() { int l, r; while (scanf("%d%d", &n, &m) == 2) { build(1, n+1, 1); while (m--) { scanf("%d%d", &l, &r); update(++l, ++r, 1); } printf("%d ", a[1].sum); } return 0; }