/*
PROBLEM: Count Valid Subarrays Without Forbidden Pairs Inside
Given:
- N positions (1 to N)
- M pairs (u, v)
Task: Count how many subarrays [l, r] don't contain any pair FULLY INSIDE.
A pair (u, v) is "fully inside" a subarray [l, r] if:
- BOTH u and v are in the range [l, r]
- Example: pair (2, 4) is fully inside [1, 5] because both 2 and 4 are in [1, 5]
A subarray is VALID if no pair is fully contained inside it. This means:
- For every pair (a, b), at least one endpoint must be outside [l, r]
Example:
N=5, M=2
Pairs: (1, 3) and (2, 5)
Invalid subarrays: [1,3], [1,4], [1,5], [2,5] (pair fully inside)
Valid subarrays: [1,1], [2,2], [3,3], [4,4], [5,5], [1,2], [2,3], [3,4], [4,5], [2,4], [3,5]
Key Insight:
For a subarray [l, r] to be valid:
- For every pair (a, b) where b <= r, we must have a < l (left endpoint outside)
- In other words: l must be > the maximum left endpoint of all pairs ending at or before r
Approach:
1. For each right endpoint r, track the maximum left endpoint among all pairs ending at r
2. As we extend r, maintain the leftmost valid starting position (bound)
3. Count valid subarrays ending at r: all positions from bound+1 to r can be left endpoints
Time: O(N + M)
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
// max[r] = maximum left endpoint among all pairs with right endpoint r
vector<int> mx(n + 1, 0);
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
// Make sure l <= r
int l = min(u, v);
int r = max(u, v);
// Track the furthest left endpoint for each right endpoint
mx[r] = max(mx[r], l);
}
long long ans = 0;
// bound = leftmost position where pair would be fully inside
int bound = 0;
// Try each position as the right endpoint
for (int r = 1; r <= n; r++) {
// Update bound: if any pair ends at r with left >= bound, update it
bound = max(bound, mx[r]);
// Count subarrays ending at r
// We can start from any position > bound up to r
// That's (r - bound) choices
ans += (long long)(r - bound);
}
cout << ans << "\n";
return 0;
}
LyoKUFJPQkxFTTogQ291bnQgVmFsaWQgU3ViYXJyYXlzIFdpdGhvdXQgRm9yYmlkZGVuIFBhaXJzIEluc2lkZQoKR2l2ZW46Ci0gTiBwb3NpdGlvbnMgKDEgdG8gTikKLSBNIHBhaXJzICh1LCB2KQoKVGFzazogQ291bnQgaG93IG1hbnkgc3ViYXJyYXlzIFtsLCByXSBkb24ndCBjb250YWluIGFueSBwYWlyIEZVTExZIElOU0lERS4KCkEgcGFpciAodSwgdikgaXMgImZ1bGx5IGluc2lkZSIgYSBzdWJhcnJheSBbbCwgcl0gaWY6Ci0gQk9USCB1IGFuZCB2IGFyZSBpbiB0aGUgcmFuZ2UgW2wsIHJdCi0gRXhhbXBsZTogcGFpciAoMiwgNCkgaXMgZnVsbHkgaW5zaWRlIFsxLCA1XSBiZWNhdXNlIGJvdGggMiBhbmQgNCBhcmUgaW4gWzEsIDVdCgpBIHN1YmFycmF5IGlzIFZBTElEIGlmIG5vIHBhaXIgaXMgZnVsbHkgY29udGFpbmVkIGluc2lkZSBpdC4gVGhpcyBtZWFuczoKLSBGb3IgZXZlcnkgcGFpciAoYSwgYiksIGF0IGxlYXN0IG9uZSBlbmRwb2ludCBtdXN0IGJlIG91dHNpZGUgW2wsIHJdCgpFeGFtcGxlOgpOPTUsIE09MgpQYWlyczogKDEsIDMpIGFuZCAoMiwgNSkKCkludmFsaWQgc3ViYXJyYXlzOiBbMSwzXSwgWzEsNF0sIFsxLDVdLCBbMiw1XSAocGFpciBmdWxseSBpbnNpZGUpClZhbGlkIHN1YmFycmF5czogWzEsMV0sIFsyLDJdLCBbMywzXSwgWzQsNF0sIFs1LDVdLCBbMSwyXSwgWzIsM10sIFszLDRdLCBbNCw1XSwgWzIsNF0sIFszLDVdCgpLZXkgSW5zaWdodDoKRm9yIGEgc3ViYXJyYXkgW2wsIHJdIHRvIGJlIHZhbGlkOgotIEZvciBldmVyeSBwYWlyIChhLCBiKSB3aGVyZSBiIDw9IHIsIHdlIG11c3QgaGF2ZSBhIDwgbCAobGVmdCBlbmRwb2ludCBvdXRzaWRlKQotIEluIG90aGVyIHdvcmRzOiBsIG11c3QgYmUgPiB0aGUgbWF4aW11bSBsZWZ0IGVuZHBvaW50IG9mIGFsbCBwYWlycyBlbmRpbmcgYXQgb3IgYmVmb3JlIHIKCkFwcHJvYWNoOgoxLiBGb3IgZWFjaCByaWdodCBlbmRwb2ludCByLCB0cmFjayB0aGUgbWF4aW11bSBsZWZ0IGVuZHBvaW50IGFtb25nIGFsbCBwYWlycyBlbmRpbmcgYXQgcgoyLiBBcyB3ZSBleHRlbmQgciwgbWFpbnRhaW4gdGhlIGxlZnRtb3N0IHZhbGlkIHN0YXJ0aW5nIHBvc2l0aW9uIChib3VuZCkKMy4gQ291bnQgdmFsaWQgc3ViYXJyYXlzIGVuZGluZyBhdCByOiBhbGwgcG9zaXRpb25zIGZyb20gYm91bmQrMSB0byByIGNhbiBiZSBsZWZ0IGVuZHBvaW50cwoKVGltZTogTyhOICsgTSkKKi8KCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgCiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CiAgICAKICAgIC8vIG1heFtyXSA9IG1heGltdW0gbGVmdCBlbmRwb2ludCBhbW9uZyBhbGwgcGFpcnMgd2l0aCByaWdodCBlbmRwb2ludCByCiAgICB2ZWN0b3I8aW50PiBteChuICsgMSwgMCk7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICAKICAgICAgICAvLyBNYWtlIHN1cmUgbCA8PSByCiAgICAgICAgaW50IGwgPSBtaW4odSwgdik7CiAgICAgICAgaW50IHIgPSBtYXgodSwgdik7CiAgICAgICAgCiAgICAgICAgLy8gVHJhY2sgdGhlIGZ1cnRoZXN0IGxlZnQgZW5kcG9pbnQgZm9yIGVhY2ggcmlnaHQgZW5kcG9pbnQKICAgICAgICBteFtyXSA9IG1heChteFtyXSwgbCk7CiAgICB9CiAgICAKICAgIGxvbmcgbG9uZyBhbnMgPSAwOwogICAgCiAgICAvLyBib3VuZCA9IGxlZnRtb3N0IHBvc2l0aW9uIHdoZXJlIHBhaXIgd291bGQgYmUgZnVsbHkgaW5zaWRlCiAgICBpbnQgYm91bmQgPSAwOwogICAgCiAgICAvLyBUcnkgZWFjaCBwb3NpdGlvbiBhcyB0aGUgcmlnaHQgZW5kcG9pbnQKICAgIGZvciAoaW50IHIgPSAxOyByIDw9IG47IHIrKykgewogICAgICAgIC8vIFVwZGF0ZSBib3VuZDogaWYgYW55IHBhaXIgZW5kcyBhdCByIHdpdGggbGVmdCA+PSBib3VuZCwgdXBkYXRlIGl0CiAgICAgICAgYm91bmQgPSBtYXgoYm91bmQsIG14W3JdKTsKICAgICAgICAKICAgICAgICAvLyBDb3VudCBzdWJhcnJheXMgZW5kaW5nIGF0IHIKICAgICAgICAvLyBXZSBjYW4gc3RhcnQgZnJvbSBhbnkgcG9zaXRpb24gPiBib3VuZCB1cCB0byByCiAgICAgICAgLy8gVGhhdCdzIChyIC0gYm91bmQpIGNob2ljZXMKICAgICAgICBhbnMgKz0gKGxvbmcgbG9uZykociAtIGJvdW5kKTsKICAgIH0KICAgIAogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKICAgIAogICAgcmV0dXJuIDA7Cn0=