#include <bits/stdc++.h>
using namespace std;
const int N = 100010, D = N << 2;
int n, m, s[N], evt;
struct event {
  int t, l, r;
} ev[N * 3];
int sum[D], rev[D];
bool cmp_ev(const event& a, const event& b) { return a.t < b.t; }
void build(int d, int lt, int rt) {
  if (lt < rt) {
    int md = (lt + rt) >> 1;
    build(d << 1 | 0, lt, md);
    build(d << 1 | 1, md + 1, rt);
  }
  sum[d] = rt - lt + 1;
}
void markrev(int d, int lt, int rt) {
  rev[d] ^= 1;
  sum[d] = rt - lt + 1 - sum[d];
}
void modify(int lq, int rq, int d = 1, int lt = 1, int rt = n) {
  if (lq <= lt && rt <= rq) {
    return markrev(d, lt, rt);
  }
  int md = (lt + rt) >> 1;
  if (rev[d]) {
    rev[d] ^= 1;
    markrev(d << 1 | 0, lt, md);
    markrev(d << 1 | 1, md + 1, rt);
  }
  if (lq <= md) {
    modify(lq, rq, d << 1 | 0, lt, md);
  }
  if (md < rq) {
    modify(lq, rq, d << 1 | 1, md + 1, rt);
  }
  sum[d] = sum[d << 1 | 0] + sum[d << 1 | 1];
}
int ask(int w, int d = 1, int lt = 1, int rt = n) {
  if (lt == rt) return sum[d];
  int md = (lt + rt) >> 1;
  if (rev[d]) {
    rev[d] ^= 1;
    markrev(d << 1 | 0, lt, md);
    markrev(d << 1 | 1, md + 1, rt);
  }
  return w <= md ? ask(w, d << 1 | 0, lt, md) : ask(w, d << 1 | 1, md + 1, rt);
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", s + i);
  }
  sort(s + 1, s + n + 1);
  for (int i = 1; i <= m; ++i) {
    int l, r;
    scanf("%d %d", &l, &r);
    if (l > r || l > s[n] || r < s[1]) continue;
    l = lower_bound(s + 1, s + n + 1, l) - s;
    r = upper_bound(s + 1, s + n + 1, r) - s - 1;
    ev[++evt] = (event){l, l, r};
    ev[++evt] = (event){r + 1, l, r};
  }
  for (int i = 1; i <= n; ++i) {
    ev[++evt] = (event){i, i, i};
  }
  sort(ev + 1, ev + evt + 1, cmp_ev);
  long long ans = (long long)n * (n - 1) * (n - 2) / 6;
  build(1, 1, n);
  int qt = 1;
  for (int i = 1; i <= n; ++i) {
    for (; qt <= evt && ev[qt].t <= i; ++qt) {
      modify(ev[qt].l, ev[qt].r);
    }
    long long cur = sum[1] - ask(i);
    ans -= cur * (cur - 1) / 2;
  }
  printf("%I64d\n", ans);
}
