#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
const int block = 500;
struct noob {
  int x, y, i;
  long long ans;
} lu[maxn], ld[maxn], ru[maxn], rd[maxn], eld[maxn], eru[maxn], erd[maxn];
bool cmp(noob x, noob y) {
  return (x.x / block < y.x / block) ||
         (x.x / block == y.x / block && x.y < y.y) ||
         (x.x / block == y.x / block && x.y == y.y && x.x < y.x);
}
bool cmp2(noob x, noob y) { return x.i < y.i; }
long long ans;
int n, m, x, y, p, q, px, py, now, a[maxn], b[maxn];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
    b[a[i]] = i;
  }
  for (int t = 1; t <= m; t++) {
    scanf("%d%d%d%d", &x, &y, &p, &q);
    lu[t].x = ld[t].x = x;
    lu[t].y = ru[t].y = y;
    ru[t].x = rd[t].x = p;
    ld[t].y = rd[t].y = q;
    lu[t].i = ld[t].i = ru[t].i = rd[t].i = t;
  }
  sort(lu + 1, lu + m + 1, cmp);
  sort(ld + 1, ld + m + 1, cmp);
  sort(ru + 1, ru + m + 1, cmp);
  sort(rd + 1, rd + m + 1, cmp);
  for (int i = 1; i <= m; i++) eld[i] = ld[i];
  for (int i = 1; i <= m; i++) eru[i] = ru[i];
  for (int i = 1; i <= m; i++) erd[i] = rd[i];
  px = 0;
  py = 0;
  now = 0;
  for (int i = 1; i <= m; i++) {
    x = lu[i].x - 1, y = lu[i].y - 1;
    while (px < x) {
      px++;
      now += a[px] <= py;
    }
    while (px > x) {
      now -= a[px] <= py;
      px--;
    }
    while (py < y) {
      py++;
      now += b[py] <= px;
    }
    while (py > y) {
      now -= b[py] <= px;
      py--;
    }
    lu[i].ans = now;
  }
  for (int i = 1; i <= m; i++) {
    x = erd[i].x, y = erd[i].y;
    while (px < x) {
      px++;
      now += a[px] <= py;
    }
    while (px > x) {
      now -= a[px] <= py;
      px--;
    }
    while (py < y) {
      py++;
      now += b[py] <= px;
    }
    while (py > y) {
      now -= b[py] <= px;
      py--;
    }
    erd[i].ans = now;
  }
  for (int i = 1; i <= m; i++) {
    x = eld[i].x - 1, y = eld[i].y;
    while (px < x) {
      px++;
      now += a[px] <= py;
    }
    while (px > x) {
      now -= a[px] <= py;
      px--;
    }
    while (py < y) {
      py++;
      now += b[py] <= px;
    }
    while (py > y) {
      now -= b[py] <= px;
      py--;
    }
    eld[i].ans = now;
  }
  for (int i = 1; i <= m; i++) {
    x = eru[i].x, y = eru[i].y - 1;
    while (px < x) {
      px++;
      now += a[px] <= py;
    }
    while (px > x) {
      now -= a[px] <= py;
      px--;
    }
    while (py < y) {
      py++;
      now += b[py] <= px;
    }
    while (py > y) {
      now -= b[py] <= px;
      py--;
    }
    eru[i].ans = now;
  }
  px = 0;
  py = n + 1;
  now = 0;
  for (int i = 1; i <= m; i++) {
    x = ld[i].x - 1, y = ld[i].y + 1;
    while (px < x) {
      px++;
      now += a[px] >= py;
    }
    while (px > x) {
      now -= a[px] >= py;
      px--;
    }
    while (py > y) {
      py--;
      now += b[py] <= px;
    }
    while (py < y) {
      now -= b[py] <= px;
      py++;
    }
    ld[i].ans = now;
  }
  px = n + 1;
  py = 0;
  now = 0;
  for (int i = 1; i <= m; i++) {
    x = ru[i].x + 1, y = ru[i].y - 1;
    while (px > x) {
      px--;
      now += a[px] <= py;
    }
    while (px < x) {
      now -= a[px] <= py;
      px++;
    }
    while (py < y) {
      py++;
      now += b[py] >= px;
    }
    while (py > y) {
      now -= b[py] >= px;
      py--;
    }
    ru[i].ans = now;
  }
  px = n + 1;
  py = n + 1;
  now = 0;
  for (int i = 1; i <= m; i++) {
    x = rd[i].x + 1, y = rd[i].y + 1;
    while (px > x) {
      px--;
      now += a[px] >= py;
    }
    while (px < x) {
      now -= a[px] >= py;
      px++;
    }
    while (py > y) {
      py--;
      now += b[py] >= px;
    }
    while (py < y) {
      now -= b[py] >= px;
      py++;
    }
    rd[i].ans = now;
  }
  sort(lu + 1, lu + m + 1, cmp2);
  sort(ld + 1, ld + m + 1, cmp2);
  sort(ru + 1, ru + m + 1, cmp2);
  sort(rd + 1, rd + m + 1, cmp2);
  sort(eld + 1, eld + m + 1, cmp2);
  sort(eru + 1, eru + m + 1, cmp2);
  sort(erd + 1, erd + m + 1, cmp2);
  for (int i = 1; i <= m; i++) {
    ans = 1ll * (lu[i].x - 1) * (lu[i].x - 1) +
          1ll * (lu[i].y - 1) * (lu[i].y - 1) +
          1ll * (rd[i].x - n) * (rd[i].x - n) +
          1ll * (rd[i].y - n) * (rd[i].y - n);
    ans -= 1ll * lu[i].ans * lu[i].ans + 1ll * ld[i].ans * ld[i].ans +
           1ll * ru[i].ans * ru[i].ans + 1ll * rd[i].ans * rd[i].ans;
    ans -= n;
    ans += erd[i].ans + lu[i].ans - eld[i].ans - eru[i].ans;
    ans /= 2;
    printf("%I64d\n", 1ll * n * (n - 1) / 2 - ans);
  }
}
