#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#pragma GCC target("sse2")
const long long N = 2e5 + 12;
long long n, k, ans, a[N];
long long lq[N], rq[N];
long long seg[N << 2];
bool lazy[N << 2];
vector<long long> job[N];
void add(long long, long long, long long, long long, long long);
void shift(long long, long long, long long);
long long get(long long, long long, long long, long long);
int32_t main() {
  cin >> n >> k;
  ans = (n * (n - 1) * (n - 2)) / 6ll;
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    lq[i + k] = i, rq[i + k] = i + 1;
    job[i].push_back(i + k);
  }
  sort(a, a + n);
  for (long long i = 0; i < k; i++) {
    cin >> lq[i] >> rq[i];
    lq[i] = lower_bound(a, a + n, lq[i]) - a;
    rq[i] = upper_bound(a, a + n, rq[i]) - a;
    job[lq[i]].push_back(i);
    job[rq[i]].push_back(i);
  }
  for (long long i = 0; i < n; i++) {
    for (auto x : job[i]) add(1, 0, n, lq[x], rq[x]);
    long long val1 = seg[1];
    long long val2 = get(1, 0, n, i);
    val1 -= val2;
    ans -= (val1 * (val1 - 1)) / 2;
  }
  return cout << ans, 0;
}
void add(long long id, long long l, long long r, long long st, long long en) {
  if (en <= l || r <= st) return;
  if (st <= l && r <= en) {
    lazy[id] = !lazy[id];
    seg[id] = (r - l) - seg[id];
    return;
  }
  shift(id, l, r);
  long long mid = (l + r) >> 1;
  add(id * 2 + 0, l, mid, st, en);
  add(id * 2 + 1, mid, r, st, en);
  seg[id] = seg[id * 2 + 0] + seg[id * 2 + 1];
  return;
}
void shift(long long id, long long l, long long r) {
  if (lazy[id] == 0) return;
  lazy[id] = 0;
  long long LK = id << 1;
  long long RK = LK | 1;
  long long mid = (l + r) >> 1;
  lazy[LK] = !lazy[LK];
  lazy[RK] = !lazy[RK];
  seg[LK] = (mid - l) - seg[LK];
  seg[RK] = (r - mid) - seg[RK];
  return;
}
long long get(long long id, long long l, long long r, long long idx) {
  if (idx < l || r <= idx) return 0;
  if (l == r - 1) return seg[id];
  shift(id, l, r);
  long long mid = (l + r) >> 1;
  if (idx < mid) return get(id * 2 + 0, l, mid, idx);
  return get(id * 2 + 1, mid, r, idx);
}
