#include <bits/stdc++.h>
using namespace std;
long long n, q;
long long x[1000004];
struct teglalap {
  long long bal, jobb, lent, fent, id;
  teglalap(long long a, long long b, long long c, long long d, long long e) {
    bal = a;
    jobb = b;
    lent = c;
    fent = d;
    id = e;
  }
  const bool operator<(const teglalap &p) const { return (lent < p.lent); }
};
struct teglalap2 {
  long long bal, jobb, lent, fent, id;
  teglalap2(long long a, long long b, long long c, long long d, long long e) {
    bal = a;
    jobb = b;
    lent = c;
    fent = d;
    id = e;
  }
  const bool operator<(const teglalap2 &p) const { return (fent > p.fent); }
};
void hozzavesz(long long hova, long long kezd, long long veg, long long hol) {
  if (kezd == veg)
    x[hol]++;
  else {
    x[hol]++;
    long long kozep = (kezd + veg) / 2;
    if (hova <= kozep)
      hozzavesz(hova, kezd, kozep, hol * 2);
    else
      hozzavesz(hova, kozep + 1, veg, hol * 2 + 1);
  }
}
long long vissza(long long xkezd, long long xveg, long long kezd, long long veg,
                 long long hol) {
  if (xkezd > xveg) return 0;
  if (xkezd == kezd && xveg == veg) {
    return x[hol];
  } else {
    long long kozep = (kezd + veg) / 2;
    if (xveg <= kozep)
      return vissza(xkezd, xveg, kezd, kozep, hol * 2);
    else if (xkezd > kozep)
      return vissza(xkezd, xveg, kozep + 1, veg, hol * 2 + 1);
    else
      return vissza(xkezd, kozep, kezd, kozep, hol * 2) +
             vissza(kozep + 1, xveg, kozep + 1, veg, hol * 2 + 1);
  }
}
long long fentrol[200003];
long long lentrol[200003];
vector<teglalap> teglalapok;
vector<teglalap2> teglalapok2;
vector<teglalap> rendessor;
vector<long long> pi;
long long tart = 0;
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> q;
  pi.resize(n + 1);
  for (int i = 1; i <= n; i++) {
    long long a;
    cin >> a;
    pi[a] = i;
  }
  rendessor.push_back(teglalap(0, 0, 0, 0, 0));
  for (int i = 1; i <= q; i++) {
    int a, b, c, d;
    cin >> a >> c >> b >> d;
    teglalapok.push_back(teglalap(a, b, c, d, i));
    rendessor.push_back(teglalap(a, b, c, d, i));
    teglalapok2.push_back(teglalap2(a, b, c, d, i));
  }
  sort(teglalapok.begin(), teglalapok.end());
  sort(teglalapok2.begin(), teglalapok2.end());
  int tart = 1;
  for (int i = 0; i < teglalapok.size(); i++) {
    while (tart < teglalapok[i].lent) {
      hozzavesz(pi[tart], 1, n, 1);
      tart++;
    }
    long long e = vissza(1, teglalapok[i].bal - 1, 1, n, 1);
    long long m = vissza(teglalapok[i].jobb + 1, n, 1, n, 1);
    lentrol[teglalapok[i].id] = (e * (e - 1) / 2) + (m * (m - 1) / 2);
  }
  for (int i = 0; i <= 1000000; i++) x[i] = 0;
  tart = n;
  for (int i = 0; i < teglalapok2.size(); i++) {
    while (tart > teglalapok2[i].fent) {
      hozzavesz(pi[tart], 1, n, 1);
      tart--;
    }
    long long e = vissza(1, teglalapok2[i].bal - 1, 1, n, 1);
    long long m = vissza(teglalapok2[i].jobb + 1, n, 1, n, 1);
    fentrol[teglalapok2[i].id] = (e * (e - 1) / 2) + (m * (m - 1) / 2);
  }
  for (int i = 1; i <= q; i++) {
    long long BALRA =
        ((long long)rendessor[i].bal - 1) * (rendessor[i].bal - 2) / 2;
    long long JOBBRA =
        (n - (rendessor[i].jobb)) * (n - (rendessor[i].jobb) - 1) / 2;
    long long FENT = -(long long)fentrol[i] +
                     (n - rendessor[i].fent) * (n - rendessor[i].fent - 1) / 2;
    long long LENT = -(long long)lentrol[i] +
                     (rendessor[i].lent - 1) * (rendessor[i].lent - 2) / 2;
    cout << ((long long)n * (n - 1) / 2) - BALRA - JOBBRA - LENT - FENT << endl;
  }
}
