#include <bits/stdc++.h>
using namespace std;
int n, m, M[200001], r;
vector<int> LA[200001];
vector<pair<int, int> > componentes;
pair<int, int> teste;
int maior, menor;
void DS(int v) {
  M[v] = 1;
  maior = max(maior, v);
  menor = min(menor, v);
  vector<int>::iterator it = LA[v].begin();
  while (it != LA[v].end()) {
    if (!M[*it]) {
      DS(*it);
    }
    it++;
  }
}
bool encaixa(pair<int, int> a, pair<int, int> b) {
  if (b.first < a.second) {
    return true;
  }
  return false;
}
int main() {
  int a, b;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    LA[a].push_back(b);
    LA[b].push_back(a);
  }
  for (int i = 1; i <= n; i++) {
    if (!M[i]) {
      maior = 0;
      menor = 200002;
      DS(i);
      componentes.push_back(make_pair(menor, maior));
    }
  }
  sort(componentes.begin(), componentes.end());
  r = 0;
  teste = *(componentes.begin());
  for (int i = 1; i < componentes.size(); i++) {
    if (encaixa(teste, componentes[i])) {
      r++;
    }
    teste.first = min(componentes[i].first, teste.first);
    teste.second = max(componentes[i].second, teste.second);
  }
  cout << r << endl;
}
