#include <bits/stdc++.h>
#define lc (u << 1)
#define rc (u << 1 | 1)
using namespace std;
const int M = 1005;
int n, m, a[M], b[M], num[M << 2], vis[M], ans = 0;
void rnk() {
sort(num + 1, num + m * 2 + 1);
int idx = 1, cnt;
for (int i = 2; i <= m * 2; i++) {
if (num[idx] != num[i]) {
num[++idx] = num[i];
}
}
cnt = idx;
for (int i = 2; i <= idx; i++) {
if (num[i] - num[i - 1] > 1) {
num[++cnt] = num[i - 1] + 1;
}
}
sort(num + 1, num + cnt + 1);
for (int i = 1; i <= m; i++) {
a[i] = lower_bound(num, num + cnt + 1, a[i]) - num;
b[i] = lower_bound(num, num + cnt + 1, b[i]) - num;
}
}
struct segtree {
int l, r, tag;
}tr[M << 4];
void build(int u, int l, int r) {
tr[u] = {l, r, 0};
if (l == r) return;
int mid = (l + r) >> 1;
build(lc, l, mid);
build(rc, mid + 1, r);
}
void pushdown(int u) {
if (tr[u].tag) {
tr[lc].tag = tr[u].tag;
tr[rc].tag = tr[u].tag;
tr[u].tag = 0;
}
}
void update(int u, int l, int r, int k) {
if (tr[u].l > r || tr[u].r < l) return;
if (l <= tr[u].l && tr[u].r <= r) {
tr[u].tag = k;
return;
}
pushdown(u);
update(lc, l, r, k);
update(rc, l, r, k);
}
void query(int u) {
if (tr[u].l == tr[u].r) {
if (tr[u].tag && !vis[tr[u].tag]) {
vis[tr[u].tag] = 1;
ans++;
}
return;
}
pushdown(u);
query(lc);
query(rc);
}
int main() {
cin >> n >> m;
build(1, 1, m * 2);
for (int i = 1; i <= m; i++) {
cin >> a[i] >> b[i];
num[i] = a[i];
num[i + m] = b[i];
}
rnk();
for (int i = 1; i <= m; i++) {
update(1, a[i], b[i], i);
}
query(1);
cout << ans;
return 0;
}