#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, m, sum[N], L[N], R[N];
vector<int> A[N], B[N];
struct Segment {
  int val[N];
  struct Node {
    int mn, ted, lz;
    long long sum;
  } seg[4 * N];
  void add(int id, int k) {
    seg[id].mn += k;
    seg[id].lz += k;
  }
  void shift(int id) {
    add(id << 1 | 1, seg[id].lz);
    add(id << 1, seg[id].lz);
    seg[id].lz = 0;
  }
  Node merge(Node a, Node b) {
    if (a.mn > b.mn) swap(a, b);
    if (a.mn == b.mn) {
      a.ted += b.ted;
      a.sum += b.sum;
    }
    return a.lz = 0, a;
  }
  void build(int id, int st, int en) {
    if (en - st == 1) {
      seg[id] = {0, 1, 0, val[st]};
      return;
    }
    int mid = (st + en) / 2;
    build(id << 1, st, mid);
    build(id << 1 | 1, mid, en);
    seg[id] = merge(seg[id << 1], seg[id << 1 | 1]);
  }
  void update(int l, int r, int k, int id, int st, int en) {
    if (r <= st || en <= l) return;
    if (l <= st && en <= r) return add(id, k);
    shift(id);
    int mid = (st + en) / 2;
    update(l, r, k, id << 1, st, mid);
    update(l, r, k, id << 1 | 1, mid, en);
    seg[id] = merge(seg[id << 1], seg[id << 1 | 1]);
  }
  int get_ted(int l, int r, int id, int st, int en) {
    if (r <= st || en <= l) return 0;
    if (l <= st && en <= r) return seg[id].mn ? 0 : seg[id].ted;
    shift(id);
    int mid = (st + en) / 2;
    return get_ted(l, r, id << 1, st, mid) +
           get_ted(l, r, id << 1 | 1, mid, en);
  }
  long long get_sum(int l, int r, int id, int st, int en) {
    if (r <= st || en <= l) return 0;
    if (l <= st && en <= r) return seg[id].mn ? 0 : seg[id].sum;
    shift(id);
    int mid = (st + en) / 2;
    return get_sum(l, r, id << 1, st, mid) +
           get_sum(l, r, id << 1 | 1, mid, en);
  }
} odd, even;
void build_odd() {
  if (m > 1) odd.build(1, 0, m / 2);
}
void update_odd(int l, int r, int k) {
  if (m > 1) odd.update(l / 2, r / 2, k, 1, 0, m / 2);
}
int get_ted_odd(int l, int r) {
  return m > 1 ? odd.get_ted(l / 2, r / 2, 1, 0, m / 2) : 0;
}
long long get_sum_odd(int l, int r) {
  return m > 1 ? odd.get_sum(l / 2, r / 2, 1, 0, m / 2) : 0;
}
void build_even() { even.build(1, 0, m - m / 2); }
void update_even(int l, int r, int k) {
  l += l & 1, r += r & 1;
  even.update(l / 2, r / 2, k, 1, 0, m - m / 2);
}
int get_ted_even(int l, int r) {
  l += l & 1, r += r & 1;
  return even.get_ted(l / 2, r / 2, 1, 0, m - m / 2);
}
long long get_sum_even(int l, int r) {
  l += l & 1, r += r & 1;
  return even.get_sum(l / 2, r / 2, 1, 0, m - m / 2);
}
long long calc(int en) {
  long long ans = 0;
  build_odd(), build_even();
  for (int i = en; i > 0; i -= 2) {
    for (auto p : B[i])
      if (i & 1)
        update_odd(L[p], R[p], 1);
      else
        update_even(L[p], R[p], 1);
    for (auto p : B[i + 1]) {
      update_odd(R[p], m, 1);
      update_even(R[p], m, 1);
      if (i & 1)
        update_odd(L[p], R[p], 1);
      else
        update_even(L[p], R[p], 1);
    }
    for (auto p : A[i]) {
      if (i & 1) {
        update_odd(L[p], R[p], -1);
        update_even(L[p], R[p], 1);
      } else {
        update_odd(L[p], R[p], 1);
        update_even(L[p], R[p], -1);
      }
      if (i + R[p] & 1) {
        update_odd(R[p], m, -1);
        update_even(R[p], m, -1);
      } else {
        update_odd(R[p], m, 1);
        update_even(R[p], m, 1);
      }
    }
    ans += get_sum_odd(i - 1, m) - (i - 2LL) * get_ted_odd(i - 1, m);
    ans += get_sum_even(i - 1, m) - (i - 2LL) * get_ted_even(i - 1, m);
  }
  return ans;
}
void read_input() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> L[i] >> R[i];
    sum[--L[i]]++, sum[R[i]]--;
    A[L[i]].push_back(i);
    B[R[i]].push_back(i);
  }
}
void solve() {
  for (int i = 0; i < m; i++) {
    sum[i + 1] += sum[i];
    even.val[i] = i << 1;
    odd.val[i] = i << 1 | 1;
  }
  long long ans = calc(m - 1) + calc(m);
  for (int i = 0; i < m; i++)
    if (!sum[i]) {
      int ted = 0;
      while (i < m && !sum[i]) ted++, i++;
      ans -= (ted + 2LL) * (ted + 1) * ted / 6;
    }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  read_input(), solve();
  return 0;
}
