#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lch(x) x<<1
#define rch(x) lch(x)|1
int c[20005];
int l[10005],r[10005];
struct node {
int l,r,a;
}G[100005];
bool vis[20005];
void build(int u, int l, int r) {
G[u].l = l;
G[u].r = r;
if (l == r) {
G[u].a = 0;
return;
}
int mid = (l+r)/2;
build(lch(u),l,mid);
build(rch(u),mid+1,r);
}
void push_down(int u) {
if (G[u].a != 0) {
G[lch(u)].a = G[u].a;
G[rch(u)].a = G[u].a;
G[u].a = 0;
}
}
void change(int u, int l, int r, int w) {
if (l <= G[u].l && G[u].r <= r) {
G[u].a = w;
return;
}
push_down(u);
int mid = (G[u].l+G[u].r)/2;
if (l <= mid) change(lch(u),l,r,w);
if (r > mid) change(rch(u),l,r,w);
}
int cnt;
void query(int u) {
if (G[u].a != 0) {
if (!vis[G[u].a]) {
vis[G[u].a] = 1;
cnt++;
}
return;
}
if (G[u].l == G[u].r) return;
query(lch(u));
query(rch(u));
}
signed main() {
int n,m;
scanf("%lld%lld",&m,&n);
for (int i = 1; i <= n; i++) {
scanf("%lld%lld",&l[i],&r[i]);
c[(i<<1)-1] = l[i];
c[i<<1] = r[i];
}
sort(c+1,c+n*2+1);
int len = unique(c+1,c+n*2+1)-c-1;
build(1,1,len);
for (int i = 1; i <= n; i++) {
l[i] = lower_bound(c+1,c+len+1,l[i])-c;
r[i] = lower_bound(c+1,c+len+1,r[i])-c;
}
for (int i = 1; i <= n; i++) {
change(1,l[i],r[i],i);
}
cnt = 0;
query(1);
printf("%lld\n",cnt);
}