/*
Task: 1253D
Date: Dec 19, 2020
Written by aLittleLove (Minh Vu)
*/
#include<bits/stdc++.h>
#define rep(i,n) for (int i=0, _n=n; i<_n; i++)
#define FOR(i,a,b) for (int _a=(a), _b=(b), i=_a; _a<=_b?i<=_b:i>=_b; _a<=_b?i++:i--)
#define _mem(a, b) memset(a, (b), sizeof(a))
#define pb push_back
#define fi first
#define se second
#define sz(a) int((a).size())
using namespace std;
typedef long long ll;
typedef int64_t i64;
typedef pair<int, int> pii;
typedef vector<pii> vii;
typedef vector<int> vi;
const int N = 2e5 + 5;
const int inf = 1e9;
const int mod = 1e9 + 7;
const double pi = atan(1) * 4.0;
template<typename T, typename U> inline void mini(T &x, U y) { if(y < x) x = y; }
template<typename T, typename U> inline void maxi(T &x, U y) { if(x < y) x = y; }
i64 _pow(i64 x, i64 y)
{
if (y==0) return 1;
i64 tmp = _pow(x, y>>1ll);
if (y&1) return (tmp%mod * tmp%mod * x%mod)%mod;
return (tmp%mod * tmp%mod)%mod;
}
vector<int> adj[N];
bool vis[N];
vector<pii> e;
int dfs(int u)
{
int mx = u;
vis[u] = 1;
for (int v: adj[u])
{
if (!vis[v])
{
mx = max(mx, dfs(v));
}
}
return mx;
}
void Solve()
{
int n, m; cin >> n >> m;
int ans = 0;
rep(i,m)
{
int u, v; cin >> u >> v;
adj[u].pb(v);
adj[v].pb(u);
}
memset(vis,0,sizeof vis);
for (int i=1; i<=n; i++)
if (!vis[i]) e.pb({i, dfs(i)});
sort(e.begin(), e.end());
int j = 0;
for (int i=0; i<e.size() - 1; i++)
{
while (j<=i) ++j;
while (j<e.size() && e[j].fi <= e[i].se) ans++, j++;
}
cout << ans << '\n';
}
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//freopen("input.txt","r",stdin);
int nTest; //cin >> nTest;
nTest = 1;
while (nTest--) Solve();
return 0;
}
LyogClRhc2s6IDEyNTNECkRhdGU6IERlYyAxOSwgMjAyMApXcml0dGVuIGJ5IGFMaXR0bGVMb3ZlIChNaW5oIFZ1KQoqLwoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSByZXAoaSxuKSBmb3IgKGludCBpPTAsIF9uPW47IGk8X247IGkrKykKI2RlZmluZSBGT1IoaSxhLGIpIGZvciAoaW50IF9hPShhKSwgX2I9KGIpLCBpPV9hOyBfYTw9X2I/aTw9X2I6aT49X2I7IF9hPD1fYj9pKys6aS0tKQojZGVmaW5lIF9tZW0oYSwgYikgbWVtc2V0KGEsIChiKSwgc2l6ZW9mKGEpKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgc3ooYSkgaW50KChhKS5zaXplKCkpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBpbnQ2NF90IGk2NDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgdmVjdG9yPHBpaT4gdmlpOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwpjb25zdCBpbnQgTiA9IDJlNSArIDU7CmNvbnN0IGludCBpbmYgPSAxZTk7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBkb3VibGUgcGkgPSBhdGFuKDEpICogNC4wOwp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBtaW5pKFQgJngsIFUgeSkgeyBpZih5IDwgeCkgeCA9IHk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIHZvaWQgbWF4aShUICZ4LCBVIHkpIHsgaWYoeCA8IHkpIHggPSB5OyB9CgppNjQgX3BvdyhpNjQgeCwgaTY0IHkpCnsKICAgIGlmICh5PT0wKSByZXR1cm4gMTsKICAgIGk2NCB0bXAgPSBfcG93KHgsIHk+PjFsbCk7CiAgICBpZiAoeSYxKSByZXR1cm4gKHRtcCVtb2QgKiB0bXAlbW9kICogeCVtb2QpJW1vZDsKICAgIHJldHVybiAodG1wJW1vZCAqIHRtcCVtb2QpJW1vZDsKfQoKdmVjdG9yPGludD4gYWRqW05dOwpib29sIHZpc1tOXTsKdmVjdG9yPHBpaT4gZTsKCmludCBkZnMoaW50IHUpCnsKICAgIGludCBteCA9IHU7CiAgICB2aXNbdV0gPSAxOwogICAgZm9yIChpbnQgdjogYWRqW3VdKQogICAgewogICAgICAgIGlmICghdmlzW3ZdKQogICAgICAgIHsKICAgICAgICAgICAgbXggPSBtYXgobXgsIGRmcyh2KSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG14Owp9Cgp2b2lkIFNvbHZlKCkKewogICAgaW50IG4sIG07IGNpbiA+PiBuID4+IG07CiAgICBpbnQgYW5zID0gMDsKICAgIHJlcChpLG0pCiAgICB7CiAgICAgICAgaW50IHUsIHY7IGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnBiKHYpOwogICAgICAgIGFkalt2XS5wYih1KTsKICAgIH0KICAgIG1lbXNldCh2aXMsMCxzaXplb2YgdmlzKTsKICAgIGZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQogICAgICAgIGlmICghdmlzW2ldKSBlLnBiKHtpLCBkZnMoaSl9KTsKICAgIHNvcnQoZS5iZWdpbigpLCBlLmVuZCgpKTsKICAgIGludCBqID0gMDsKICAgIGZvciAoaW50IGk9MDsgaTxlLnNpemUoKSAtIDE7IGkrKykKICAgIHsKICAgICAgICB3aGlsZSAoajw9aSkgKytqOwogICAgICAgIHdoaWxlIChqPGUuc2l6ZSgpICYmIGVbal0uZmkgPD0gZVtpXS5zZSkgYW5zKyssIGorKzsKICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0KCmludCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgLy9mcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7CiAgICBpbnQgblRlc3Q7IC8vY2luID4+IG5UZXN0OwogICAgblRlc3QgPSAxOwogICAgd2hpbGUgKG5UZXN0LS0pIFNvbHZlKCk7CgogICAgcmV0dXJuIDA7Cn0=