Link to this code: https://cses.fi/paste/4050cb3f348da766c6703f/
/**
 *    author: tourist
 *    created: 22.05.2025 16:24:14
**/
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

template <typename T>
class fenwick {
 public:
  vector<T> fenw;
  int n;

  fenwick(int _n) : n(_n) {
    fenw.resize(n);
  }

  void modify(int x, T v) {
    while (x < n) {
      fenw[x] += v;
      x |= (x + 1);
    }
  }

  T get(int x) {
    T v{};
    while (x >= 0) {
      v += fenw[x];
      x = (x & (x + 1)) - 1;
    }
    return v;
  }
};

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr); 
  int n, q;
  cin >> n >> q;
  vector<int> x(n + 1);
  for (int i = 1; i <= n; i++) {
    cin >> x[i];
  }
  vector<pair<int, int>> sx(n + 1);
  for (int i = 1; i <= n; i++) {
    sx[i] = make_pair(x[i], i);
  }
  sort(sx.begin(), sx.end());
  vector<tuple<int, int, int, int>> events;
  for (int i = 0; i < q; i++) {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    events.emplace_back(d, b, 1, i);
    events.emplace_back(c - 1, a - 1, 1, i);
    events.emplace_back(d, a - 1, -1, i);
    events.emplace_back(c - 1, b, -1, i);
  }
  sort(events.begin(), events.end());
  fenwick<int> fenw(n + 1);
  int ptr = 1;
  vector<int> ans(q);
  for (auto [v, i, sig, id] : events) {
    while (ptr <= n && sx[ptr].first <= v) {
      fenw.modify(sx[ptr].second, 1);
      ptr += 1;
    }
    ans[id] += sig * fenw.get(i);
  }
  for (int i = 0; i < q; i++) {
    cout << ans[i] << '\n';
  }
  return 0;
}