#include <bits/stdc++.h>
using namespace std;
const int N = 3 + 2e5;
int root[N], ls[N << 5], rs[N << 5], id;
int sum[N << 5];
int n, q, p[N];
void update(int &u, int v, int l, int r, int p) {
  sum[u = ++id] = sum[v] + 1;
  if (l == r) return;
  int mid = l + r >> 1;
  if (p <= mid)
    rs[u] = rs[v], update(ls[u], ls[v], l, mid, p);
  else
    ls[u] = ls[v], update(rs[u], rs[v], mid + 1, r, p);
}
int query(int u, int v, int l, int r, int L, int R) {
  if (L <= l && r <= R) return sum[v] - sum[u];
  int ans = 0, mid = l + r >> 1;
  if (L <= mid) ans = query(ls[u], ls[v], l, mid, L, R);
  if (R > mid) ans += query(rs[u], rs[v], mid + 1, r, L, R);
  return ans;
}
int query(int d, int u, int l, int r) {
  if (l > r || u < d) return 0;
  return query(root[l - 1], root[r], 1, n, d, u);
}
int main() {
  int l, d, r, u;
  scanf("%d%d", &n, &q);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", p + i);
    update(root[i], root[i - 1], 1, n, p[i]);
  }
  while (q--) {
    scanf("%d%d%d%d", &l, &d, &r, &u);
    long long a1 = query(u + 1, n, 1, l - 1);
    long long a2 = query(u + 1, n, l, r);
    long long a3 = query(u + 1, n, r + 1, n);
    long long a4 = query(d, u, 1, l - 1);
    long long a5 = query(d, u, l, r);
    long long a6 = query(d, u, r + 1, n);
    long long a7 = query(1, d - 1, 1, l - 1);
    long long a8 = query(1, d - 1, l, r);
    long long a9 = query(1, d - 1, r + 1, n);
    long long ans = 0;
    ans = a1 * (a5 + a6 + a8 + a9);
    ans += a2 * (a4 + a5 + a6 + a7 + a8 + a9);
    ans += a3 * (a4 + a5 + a7 + a8);
    ans += a4 * (a5 + a6 + a8 + a9);
    ans += a5 * (a6 + a7 + a8 + a9);
    ans += a6 * (a7 + a8);
    ans += a5 * (a5 - 1) / 2;
    printf("%lld\n", ans);
  }
  return 0;
}
