#include <bits/stdc++.h>
using namespace std;
int fa[200005];
int l[200005], r[200005];
bool isroot[200005];
int root(int x) {
if (fa[x] == -1) {
return x;
}
return fa[x] = root(fa[x]);
}
int merge(int x, int y) {
int a = root(x), b = root(y);
if (a == b) {
return 0;
}
fa[a] = b;
return 1;
}
int solve(int x) {
int ans = 0;
for (int i = l[x]; i <= r[x]; i++) {
ans += merge(l[x], i);
}
return ans;
}
int main() {
memset(fa, -1, sizeof fa);
memset(l, 0x3f, sizeof l);
memset(r, -1, sizeof r);
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d %d", &u, &v);
u--, v--;
merge(u, v);
}
for (int i = 0; i < n; i++) {
int rt = root(i);
l[rt] = min(l[rt], i);
r[rt] = max(r[rt], i);
if (rt == i) {
isroot[i] = 1;
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
if (isroot[i]) {
ans += solve(i);
}
}
printf("%d\n", ans);
return 0;
}