#include <bits/stdc++.h>
using namespace std;
const int MX = 200005;
int ara[MX];
struct node {
  node *left, *right;
  int cnt = 0;
  node(int v = 1, node *b = NULL, node *e = NULL) : cnt(v), left(b), right(e) {}
  void build(int l, int r) {
    if (l == r) {
      cnt = 0;
      return;
    }
    int mid = l + r >> 1;
    left = new node();
    right = new node();
    left->build(l, mid);
    right->build(mid + 1, r);
    cnt = left->cnt + right->cnt;
  }
  node *update(int l, int r, int idx) {
    if (idx > r || idx < l) return this;
    if (l == r) {
      node *ret = new node(cnt);
      ret->cnt += 1;
      return ret;
    }
    int mid = l + r >> 1;
    node *ret = new node(cnt);
    ret->left = left->update(l, mid, idx);
    ret->right = right->update(mid + 1, r, idx);
    ret->cnt = ret->left->cnt + ret->right->cnt;
    return ret;
  }
  int query(int l, int r, int i, int j) {
    if (j < l || i > r) return 0;
    if (l >= i && r <= j) return cnt;
    int mid = l + r >> 1;
    return left->query(l, mid, i, j) + right->query(mid + 1, r, i, j);
  }
} * root[MX];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, q;
  cin >> n >> q;
  root[0] = new node();
  root[0]->build(1, n);
  for (int i = 1; i <= n; i++) {
    cin >> ara[i];
    root[i] = root[i - 1]->update(1, n, ara[i]);
  }
  int l, r, u, d;
  while (q--) {
    cin >> l >> d >> r >> u;
    long long ans = 0LL;
    int les_d_L = root[l - 1]->query(1, n, 1, d - 1);
    int les_eq_u_L = root[l - 1]->query(1, n, 1, u) - les_d_L;
    int gret_u_L = l - 1 - les_eq_u_L - les_d_L;
    int les_d_full = root[n]->query(1, n, 1, d - 1);
    int les_eq_u_full = root[n]->query(1, n, 1, u) - les_d_full;
    int gret_u_full = n - les_eq_u_full - les_d_full;
    int les_d_R = root[r]->query(1, n, 1, d - 1);
    int les_eq_u_R = root[r]->query(1, n, 1, u) - les_d_R;
    int gret_u_R = r - les_eq_u_R - les_d_R;
    int les_d_M = les_d_R - les_d_L;
    int les_eq_u_M = les_eq_u_R - les_eq_u_L;
    int gret_u_M = gret_u_R - gret_u_L;
    int les_d_r = les_d_full - les_d_R;
    int les_eq_u_r = les_eq_u_full - les_eq_u_R;
    int gret_u_r = gret_u_full - gret_u_R;
    ans += 1LL * les_eq_u_M * (les_eq_u_M - 1) / 2;
    ans += 1LL * les_d_L * (gret_u_M + les_eq_u_M + les_eq_u_r + gret_u_r);
    ans += 1LL * les_eq_u_L *
           (gret_u_M + les_eq_u_M + les_d_M + les_d_r + les_eq_u_r + gret_u_r);
    ans += 1LL * gret_u_L * (les_eq_u_M + les_d_M + les_d_r + les_eq_u_r);
    ans += 1LL * les_d_M * (gret_u_M + les_eq_u_M + les_eq_u_r + gret_u_r);
    ans += 1LL * les_eq_u_M * (gret_u_M + les_d_r + les_eq_u_r + gret_u_r);
    ans += 1LL * gret_u_M * (les_d_r + les_eq_u_r);
    cout << ans << "\n";
  }
  return 0;
}
