/* -*- coding: utf-8 -*- * * 1194.cc: No.1194 Replace - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_M = 200000; const int MAX_K = MAX_M * 2; /* typedef */ typedef long long ll; typedef vector vi; typedef queue qi; typedef pair pii; /* global variables */ pii es[MAX_M]; int uvs[MAX_K], mxs[MAX_K]; vi nbrs[MAX_K]; /* subroutines */ /* main */ int main() { int n, m; scanf("%d%d", &n, &m); int k = 0; for (int i = 0; i < m; i++) { int b, c; scanf("%d%d", &b, &c); es[i] = pii(b, c); uvs[k++] = b, uvs[k++] = c; } sort(uvs, uvs + k); k = unique(uvs, uvs + k) - uvs; //printf("k=%d\n", k); for (int i = 0; i < m; i++) { int bi = lower_bound(uvs, uvs + k, es[i].first) - uvs; int ci = lower_bound(uvs, uvs + k, es[i].second) - uvs; nbrs[ci].push_back(bi); } for (int st = k - 1; st >= 0; st--) if (! mxs[st]) { int x = mxs[st] = uvs[st]; qi q; q.push(st); while (! q.empty()) { int u = q.front(); q.pop(); vi &nbru = nbrs[u]; for (vi::iterator vit = nbru.begin(); vit != nbru.end(); vit++) { int v = *vit; if (! mxs[v]) { mxs[v] = x; q.push(v); } } } } ll sum = (ll)n * (n + 1) / 2; for (int i = 0; i < k; i++) sum += mxs[i] - uvs[i]; printf("%lld\n", sum); return 0; }