#include<cstdio>
int l,t[10005];
//树状数组经典函数,没什么好说的
void add(int x,int y)
{
if(!x)return;
for(;x<=l+1;x+=x&-x)//平移一位
t[x]+=y;
}
int query(int x)
{
int s=0;
for(;x;x-=x&-x)
s+=t[x];
return s;
}
int main()
{
int m,x,y;
scanf("%d%d",&l,&m);
while(m--)
{
scanf("%d%d",&x,&y);
add(x+1,1);//原来应该是 [x..n]++, [y+1..n]-- 实现区间加,这里平移一位以凸显 0,无伤大雅。
add(y+2,-1);
}
int ans=0;
for(int i=1;i<=l+1;i++)//同样 [0..l] 平移至 [1..l+1]
ans+=query(i)==0;//如果为 0 则说明这里没有被砍伐过,累计入答案
printf("%d\n",ans);
return 0;
}
int l,t[10005];
//树状数组经典函数,没什么好说的
void add(int x,int y)
{
if(!x)return;
for(;x<=l+1;x+=x&-x)//平移一位
t[x]+=y;
}
int query(int x)
{
int s=0;
for(;x;x-=x&-x)
s+=t[x];
return s;
}
int main()
{
int m,x,y;
scanf("%d%d",&l,&m);
while(m--)
{
scanf("%d%d",&x,&y);
add(x+1,1);//原来应该是 [x..n]++, [y+1..n]-- 实现区间加,这里平移一位以凸显 0,无伤大雅。
add(y+2,-1);
}
int ans=0;
for(int i=1;i<=l+1;i++)//同样 [0..l] 平移至 [1..l+1]
ans+=query(i)==0;//如果为 0 则说明这里没有被砍伐过,累计入答案
printf("%d\n",ans);
return 0;
}