#include <bits/stdc++.h>
using namespace std;
void dfs2(int node, vector<bool> &visited, vector<vector<int> > &adjList, int &minval, int &maxval)
{
visited[node] = true;
minval = min(minval, node);
maxval = max(maxval, node);
for(auto &neighbour : adjList[node])
if(!visited[neighbour])
dfs2(neighbour,visited,adjList,minval,maxval);
return;
}
void dfs(vector<vector<int> > &adjList, int &V, vector<pair<int,int> > &minmax)
{
vector<bool> visited(V,false);
for(int node = 0; node < V; node++)
if(!visited[node])
{
int minval = 200000;
int maxval = -1;
dfs2(node,visited,adjList,minval,maxval);
if(minval!=maxval) minmax.push_back({minval,maxval});
}
return;
}
class SetUnion
{
public:
struct Node
{
int rank;
int parent;
};
unordered_map <int,Node> st;
void makeSet(vector<int> &v)
{
for(int &i : v) st[i] = {1,i};
}
int find_root(int data)
{
if(st[data].parent == data) return data;
st[data].parent = find_root(st[data].parent);
return st[data].parent;
}
bool do_union(int data1, int data2)
{
int x = find_root(data1);
int y = find_root(data2);
if(x == y) return false;
if(st[x].rank > st[y].rank) st[y].parent = x;
else if(st[y].rank > st[x].rank) st[x].parent = y;
else
{
st[y].parent = x;
st[x].rank++;
}
return true;
}
};
int main()
{
SetUnion s;
int n, m;
scanf("%d %d", &n, &m);
vector<int> v(n);
vector<vector<int> > adj(n);
for(int i = 0; i < n; i++) v[i] = i;
s.makeSet(v);
for(int i = 0; i < m; i++) {
int u, v;
scanf("%d %d", &u, &v);
u--;v--;
s.do_union(u,v);
adj[u].push_back(v);
adj[v].push_back(u);
}
vector< pair<int,int> > minmax;
dfs(adj,n,minmax);
int cnt = 0;
for(pair<int,int> &p : minmax) {
int minval = p.first;
int maxval = p.second;
for(int i = minval; i <= maxval; i++)
if(s.do_union(minval, i))
cnt++;
}
printf("%d", cnt);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgZGZzMihpbnQgbm9kZSwgdmVjdG9yPGJvb2w+ICZ2aXNpdGVkLCB2ZWN0b3I8dmVjdG9yPGludD4gPiAmYWRqTGlzdCwgaW50ICZtaW52YWwsIGludCAmbWF4dmFsKQp7CiAgICB2aXNpdGVkW25vZGVdID0gdHJ1ZTsKICAgIG1pbnZhbCA9IG1pbihtaW52YWwsIG5vZGUpOwogICAgbWF4dmFsID0gbWF4KG1heHZhbCwgbm9kZSk7CiAgICBmb3IoYXV0byAmbmVpZ2hib3VyIDogYWRqTGlzdFtub2RlXSkKICAgICAgICBpZighdmlzaXRlZFtuZWlnaGJvdXJdKQogICAgICAgICAgICBkZnMyKG5laWdoYm91cix2aXNpdGVkLGFkakxpc3QsbWludmFsLG1heHZhbCk7CiAgICByZXR1cm47Cn0Kdm9pZCBkZnModmVjdG9yPHZlY3RvcjxpbnQ+ID4gJmFkakxpc3QsIGludCAmViwgdmVjdG9yPHBhaXI8aW50LGludD4gPiAmbWlubWF4KQp7CiAgICB2ZWN0b3I8Ym9vbD4gdmlzaXRlZChWLGZhbHNlKTsKICAgIGZvcihpbnQgbm9kZSA9IDA7IG5vZGUgPCBWOyBub2RlKyspCiAgICAgICAgaWYoIXZpc2l0ZWRbbm9kZV0pCiAgICAgICAgewogICAgICAgIAlpbnQgbWludmFsID0gMjAwMDAwOwogICAgICAgIAlpbnQgbWF4dmFsID0gLTE7CiAgICAgICAgICAgIGRmczIobm9kZSx2aXNpdGVkLGFkakxpc3QsbWludmFsLG1heHZhbCk7CiAgICAgICAgICAgIGlmKG1pbnZhbCE9bWF4dmFsKSBtaW5tYXgucHVzaF9iYWNrKHttaW52YWwsbWF4dmFsfSk7CiAgICAgICAgfQogICAgcmV0dXJuOwp9CmNsYXNzIFNldFVuaW9uCnsKcHVibGljOgogICAgc3RydWN0IE5vZGUKICAgIHsKICAgICAgICBpbnQgcmFuazsKICAgICAgICBpbnQgcGFyZW50OwogICAgfTsKICAgIHVub3JkZXJlZF9tYXAgPGludCxOb2RlPiBzdDsKICAgIHZvaWQgbWFrZVNldCh2ZWN0b3I8aW50PiAmdikKICAgIHsKICAgICAgICBmb3IoaW50ICZpIDogdikgc3RbaV0gPSB7MSxpfTsKICAgIH0KICAgIGludCBmaW5kX3Jvb3QoaW50IGRhdGEpCiAgICB7CiAgICAgICAgaWYoc3RbZGF0YV0ucGFyZW50ID09IGRhdGEpIHJldHVybiBkYXRhOwogICAgICAgIHN0W2RhdGFdLnBhcmVudCA9IGZpbmRfcm9vdChzdFtkYXRhXS5wYXJlbnQpOwogICAgICAgIHJldHVybiBzdFtkYXRhXS5wYXJlbnQ7CiAgICB9CiAgICBib29sIGRvX3VuaW9uKGludCBkYXRhMSwgaW50IGRhdGEyKQogICAgewogICAgICAgIGludCB4ID0gZmluZF9yb290KGRhdGExKTsKICAgICAgICBpbnQgeSA9IGZpbmRfcm9vdChkYXRhMik7CiAgICAgICAgaWYoeCA9PSB5KSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYoc3RbeF0ucmFuayA+IHN0W3ldLnJhbmspIHN0W3ldLnBhcmVudCA9IHg7CiAgICAgICAgZWxzZSBpZihzdFt5XS5yYW5rID4gc3RbeF0ucmFuaykgc3RbeF0ucGFyZW50ID0geTsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBzdFt5XS5wYXJlbnQgPSB4OwogICAgICAgICAgICBzdFt4XS5yYW5rKys7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9OwppbnQgbWFpbigpICAKewogICAgU2V0VW5pb24gczsKICAgIGludCBuLCBtOwogICAgc2NhbmYoIiVkICVkIiwgJm4sICZtKTsKICAgIHZlY3RvcjxpbnQ+IHYobik7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4gPiBhZGoobik7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB2W2ldID0gaTsKICAgIHMubWFrZVNldCh2KTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgIAlpbnQgdSwgdjsKICAgIAlzY2FuZigiJWQgJWQiLCAmdSwgJnYpOwogICAgCXUtLTt2LS07CiAgICAJcy5kb191bmlvbih1LHYpOwogICAgCWFkalt1XS5wdXNoX2JhY2sodik7CiAgICAJYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIHZlY3RvcjwgcGFpcjxpbnQsaW50PiA+IG1pbm1heDsKICAgIGRmcyhhZGosbixtaW5tYXgpOwogICAgaW50IGNudCA9IDA7CiAgICBmb3IocGFpcjxpbnQsaW50PiAmcCA6IG1pbm1heCkgewogICAgCWludCBtaW52YWwgPSBwLmZpcnN0OwogICAgCWludCBtYXh2YWwgPSBwLnNlY29uZDsKICAgIAlmb3IoaW50IGkgPSBtaW52YWw7IGkgPD0gbWF4dmFsOyBpKyspCiAgICAJCWlmKHMuZG9fdW5pb24obWludmFsLCBpKSkKICAgIAkJCWNudCsrOwogICAgfQogICAgcHJpbnRmKCIlZCIsIGNudCk7CiAgICByZXR1cm4gMDsKfQ==