#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010*4;
struct STree{
int l,r,sum;
}a[maxn];//线段树结点
int n,m;//n个数,m次修改
void build(int k,int p,int q)//建立线段树
{
a[k].l=p;a[k].r=q;
if(p==q)//建树时到叶结点返回
{
a[k].sum=1;//开始只有1棵树
return;
}
int mid=p+q>>1;
build(k<<1,p,mid);
build(k<<1|1,mid+1,q);
a[k].sum=a[k<<1].sum+a[k<<1|1].sum;
}
void modify(int k,int x,int y)//区间[x,y]的树拔光
{
if(a[k].l>y || a[k].r<x || a[k].sum == 0) return;//范围外直接返回
if(a[k].l>=x && a[k].r<=y)//完全包含
{
a[k].sum=0;//将此区间的树全部拔光
return;
}
if(x<=a[k<<1].r) modify(k<<1,x,y);
if(y>=a[k<<1|1].l) modify(k<<1|1,x,y);
a[k].sum=a[k<<1].sum+a[k<<1|1].sum;//返回更新所有上部结点
}
int main()
{
cin>>n>>m;
build(1,0,n);
for(int i=1;i<=m;i++)
{
int x,y;//区间[x,y]上的树砍掉
cin>>x>>y;
modify(1,x,y);
}
cout<<a[1].sum<<" ";
return 0;
}