func_code_string: #include <bits/stdc++.h>   using namespace std;   using vi = vector<long long int>;   using vvi = vector<vi>;   using vb = vector<bool>;   using vc = vector<char>;   using vs = vector<string>;   using vld = vector<long double>;   using pii = pair<long long int, long long int>;   using psi = pair<string, long long int>;   using pci = pair<char, long long int>;   using vpii = vector<pii>;   long long int mod = 1e9 + 7;   long long int const maxn = 2e5 + 5;   long long int const inf = 1e18;   long long int add(long long int a, long long int b) {     return ((a % mod) + (b % mod)) % mod;   }   long long int mul(long long int a, long long int b) {     return ((a % mod) * (b % mod)) % mod;   }   long long int powm(long long int x, long long int n, long long int M) {     long long int result = 1;     while (n > 0) {       if (n % 2 == 1) result = (result * x) % M;       x = (x * x) % M;       n = n / 2;     }     return result;   }   long long int modinverse(long long int a, long long int m) {     return powm(a, m - 2, m);   }   bool prime(long long int x) {     if (x <= 1) return false;     for (int i = 2; i <= sqrt(x); i++)       if (x % i == 0) return false;     return true;   }   long long int divisor(long long int x) {     long long int cnt = 0;     for (int i = 1; i <= sqrt(x); i++) {       if (x % i == 0) {         if (i != x / i)           cnt += 2;         else           cnt += 1;       }     }     return cnt;   }   vector<long long int> sieve(long long int n) {     bool prim[n + 1];     memset(prim, true, sizeof(prim));     for (long long int p = 2; p * p <= n; p++) {       if (prim[p] == true) {         for (int i = p * p; i <= n; i += p) prim[i] = false;       }     }     vector<long long int> v;     for (int i = 2; i <= n; i++)       if (prim[i]) v.push_back(i);     return v;   }   vvi adj(maxn);   vb vis(maxn, false);   long long int x, y;   void dfs(long long int u) {     if (vis[u] == true) return;     vis[u] = true;     if (x == -1 and y == -1) {       x = u;       y = u;     }     x = min(x, u);     y = max(y, u);     for (auto v : adj[u]) {       if (!vis[v]) {         dfs(v);       }     }   }   int main() {     int t;     t = 1;     while (t--) {       long long int n, m;       cin >> n >> m;       vpii ans;       for (long long int i = 0; i < m; i++) {         long long int a, b;         cin >> a >> b;         adj[a].push_back(b);         adj[b].push_back(a);       }       for (long long int i = 1; i <= n; i++) {         if (!vis[i]) {           x = -1;           y = -1;           dfs(i);           ans.push_back({x, y});         }       }       sort(ans.begin(), ans.end());       long long int cnt = 0;       for (long long int i = 1; i <= (long long int)ans.size() - 1; i++) {         if (ans[i - 1].second >= ans[i].first) {           cnt++;           ans[i].second = max(ans[i - 1].second, ans[i].second);         }       }       cout << cnt <<   n ;     }     return 0;   }   