voidinit() { for (int i = 1; i <= n; i++) fa[i] = i; }
intfind(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); }
voidnuio(int x, int y) { int fx = find(x), fy = find(y); if (fx != fy) { if (fx > fy) fa[fy] = fx; else fa[fx] = fy; } }
intmain() { scanf("%d%d", &n, &m); init(); for (int i = 1; i <= m; i++) { int x, y; scanf("%d%d", &x, &y); nuio(x, y); } int res = 0; for (int i = 1; i <= n; i++) { int fx = find(i); while (i < fx) { int fy = find(i); if (fx != fy) { res++; if (fx > fy) fa[fy] = fx; else fa[fx] = fy; fx = max(fx, fy); } i++; } } printf("%d\n", res); return0; }