#include <bits/stdc++.h>
using namespace std;
const int maxn = 4 * 1000 * 100 + 1000;
vector<pair<int, int> > q[maxn];
int sum[maxn], s[maxn], lazy[maxn], n, k;
void shift(int v, int s, int e) {
  int mid = (s + e) / 2;
  if (lazy[v] % 2 == 0) return;
  lazy[2 * v]++;
  sum[2 * v] = mid - s - sum[2 * v];
  lazy[2 * v + 1]++;
  sum[2 * v + 1] = e - mid - sum[2 * v + 1];
  lazy[v] = 0;
}
void add(int v, int s, int e, int qs, int qe) {
  if (qs >= e || qe <= s) return;
  if (qs <= s && qe >= e) {
    sum[v] = e - s - sum[v];
    lazy[v] += 1;
    return;
  }
  int mid = (s + e) / 2;
  shift(v, s, e);
  add(2 * v, s, mid, qs, qe);
  add(2 * v + 1, mid, e, qs, qe);
  sum[v] = sum[2 * v] + sum[2 * v + 1];
}
int get_sum(int v, int s, int e, int qs, int qe) {
  if (qs >= e || qe <= s) return 0;
  if (qs <= s && qe >= e) return sum[v];
  int mid = (s + e) / 2;
  shift(v, s, e);
  return get_sum(2 * v, s, mid, qs, qe) + get_sum(2 * v + 1, mid, e, qs, qe);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> s[i];
  sort(s, s + n);
  for (int i = 0; i < k; i++) {
    int a, b;
    cin >> a >> b;
    int l = lower_bound(s, s + n, a) - s;
    int r = upper_bound(s, s + n, b) - s;
    q[l].push_back({l, r});
    q[r].push_back({l, r});
  }
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    for (auto que : q[i]) add(1, 0, n, que.first, que.second);
    long long deg =
        get_sum(1, 0, n, 0, i) + n - 1 - i - get_sum(1, 0, n, i + 1, n);
    ans += deg * (deg - 1) / 2;
  }
  cout << (long long)n * (n - 1) * (n - 2) / 6 - ans;
}
