#include using namespace std; template struct Ftree { vector dat; function fadd; Ftree(int n, function f) : dat(n + 1), fadd(f) {} D operator()(int x) { D s(zero); for (int i = x + 1; i; i -= i & -i) s = fadd(s, dat[i]); return s; } void add(int x, const D &v) { for (int i = x + 1; i < dat.size(); i += i & -i) dat[i] = fadd(dat[i], v); } }; vector range_n(int l, int r = -1) { // [l, r), or [0, l) if r == -1 vector v; if (~r) v.resize(r - l), iota(v.begin(), v.end(), l); else v.resize(l), iota(v.begin(), v.end(), 0); return v; } signed main() { ios::sync_with_stdio(false); int N, M; cin >> N >> M; vector A(N), B(N); for (int i = 0; i < N; ++i) cin >> A[i] >> B[i]; for (int i = 0; i < N; ++i) if (A[i] > B[i]) swap(A[i], B[i]); vector aord(range_n(N)); sort(aord.begin(), aord.end(), [&](int i, int j) { return A[i] < A[j]; }); int64_t ans = 0; Ftree tree(M, [](int a, int b) { return a + b; }); for (int ai = 0; ai < N; ++ai) { int i = aord[ai]; ans += tree(B[i] - 1) - tree(A[i]); tree.add(B[i], 1); } cout << ans << endl; return 0; }