#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define FAST ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
#define ll int
#define ld long double
//#define int long long
#define endl "\n"
#define yes cout<<"YES"<<endl;
#define no cout<<"NO"<<endl;
#define pb push_back
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
using namespace std;
const int MOD = 1e9 + 7;
//const int MOD = 998244353 ;
const int N_Max = 2e5 + 5;
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
struct Query {
int id, l, r, mx, mn;
};
Query qry[N_Max];
int ans[N_Max];
int a[N_Max];
int N, Q;
int l, r;
int res[N_Max + 1];
const int Bl = 448;
int bloc[Bl + 5];
void add(int val) {
res[a[val]]++;
bloc[a[val] / Bl]++;
}
void rmv(int val) {
res[a[val]]--;
bloc[a[val] / Bl]--;
}
void update(int id) {
while (r < qry[id].r) add(++r);
while (l > qry[id].l) add(--l);
while (r > qry[id].r) rmv(r--);
while (l < qry[id].l) rmv(l++);
}
int query(int mn, int mx) {
if(mn>mx){
return 0;
}
ll aux = 0;
ll bloc1 = mn / Bl;
ll bloc2 = mx / Bl;
if (bloc1 == bloc2) {
for (int i = mn; i <= mx; i++) {
aux += res[i];
}
} else {
for (int i = mn; i < (bloc1 + 1) * Bl; i++) {
aux += res[i];
}
for (int i = bloc1 + 1; i < bloc2; i++) {
aux += bloc[i];
}
for (int i = bloc2 * Bl; i <= mx; i++) {
aux += res[i];
}
}
return aux;
}
void mo() {
int B = sqrt(2 * N);
sort(qry + 1, qry + Q + 1, [B](Query a, Query b) { return make_pair(a.l / B, a.r) < make_pair(b.l / B, b.r); });
l = 1, r = 0;
for (int i = 1; i <= Q; i++) {
update(i);
ans[qry[i].id] = query(qry[i].mn, qry[i].mx);
}
}
void solve() {
cin>>N>>Q;
vector<ll> comp;
for(int i=1;i<=N;i++){
cin>>a[i];
comp.pb(a[i]);
}
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()),comp.end());
for(int i=1;i<=N;i++){
a[i]= lower_bound(comp.begin(), comp.end(),a[i])-comp.begin();
}
for(int i=1;i<=Q;i++){
cin>>qry[i].l>>qry[i].r>>qry[i].mn>>qry[i].mx;
qry[i].mn= lower_bound(comp.begin(), comp.end(),qry[i].mn)-comp.begin();
qry[i].mx= upper_bound(comp.begin(), comp.end(),qry[i].mx)-comp.begin()-1;
qry[i].id=i;
}
mo();
for(int i=1;i<=Q;i++){
cout<<ans[i]<<endl;
}
}
signed main() {
FAST;
auto begin = std::chrono::high_resolution_clock::now();
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ll t = 1;
//cin>>t;
while (t--) solve();
#ifndef ONLINE_JUDGE
auto end = std::chrono::high_resolution_clock::now();
cout << setprecision(4) << fixed;
cout << "Execution time: " << std::chrono::duration_cast<std::chrono::duration<double>>(end - begin).count()
<< " seconds" << endl;
#endif
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KCnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwojZGVmaW5lIEZBU1QgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksY291dC50aWUoMCkKI2RlZmluZSBsbCBpbnQKI2RlZmluZSBsZCBsb25nIGRvdWJsZQovLyNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIHllcyBjb3V0PDwiWUVTIjw8ZW5kbDsKI2RlZmluZSBubyBjb3V0PDwiTk8iPDxlbmRsOwojZGVmaW5lIHBiIHB1c2hfYmFjawovLyNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyx1bnJvbGwtbG9vcHMiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4MixibWksYm1pMixsemNudCxwb3BjbnQiKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKLy9jb25zdCBpbnQgTU9EID0gOTk4MjQ0MzUzICA7CmNvbnN0IGludCBOX01heCA9IDJlNSArIDU7CnR5cGVkZWYgdHJlZTxsbCwgbnVsbF90eXBlLCBsZXNzPGxsPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gaW5kZXhlZF9zZXQ7CgpzdHJ1Y3QgUXVlcnkgewogICAgaW50IGlkLCBsLCByLCBteCwgbW47Cn07CgpRdWVyeSBxcnlbTl9NYXhdOwppbnQgYW5zW05fTWF4XTsKaW50IGFbTl9NYXhdOwppbnQgTiwgUTsKaW50IGwsIHI7CmludCByZXNbTl9NYXggKyAxXTsKY29uc3QgaW50IEJsID0gNDQ4OwppbnQgYmxvY1tCbCArIDVdOwoKCnZvaWQgYWRkKGludCB2YWwpIHsKICAgIHJlc1thW3ZhbF1dKys7CiAgICBibG9jW2FbdmFsXSAvIEJsXSsrOwp9Cgp2b2lkIHJtdihpbnQgdmFsKSB7CiAgICByZXNbYVt2YWxdXS0tOwogICAgYmxvY1thW3ZhbF0gLyBCbF0tLTsKfQoKdm9pZCB1cGRhdGUoaW50IGlkKSB7CiAgICB3aGlsZSAociA8IHFyeVtpZF0ucikgYWRkKCsrcik7CgogICAgd2hpbGUgKGwgPiBxcnlbaWRdLmwpIGFkZCgtLWwpOwoKICAgIHdoaWxlIChyID4gcXJ5W2lkXS5yKSBybXYoci0tKTsKCiAgICB3aGlsZSAobCA8IHFyeVtpZF0ubCkgcm12KGwrKyk7Cn0KCmludCBxdWVyeShpbnQgbW4sIGludCBteCkgewogICAgaWYobW4+bXgpewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgbGwgYXV4ID0gMDsKICAgIGxsIGJsb2MxID0gbW4gLyBCbDsKICAgIGxsIGJsb2MyID0gbXggLyBCbDsKICAgIGlmIChibG9jMSA9PSBibG9jMikgewogICAgICAgIGZvciAoaW50IGkgPSBtbjsgaSA8PSBteDsgaSsrKSB7CiAgICAgICAgICAgIGF1eCArPSByZXNbaV07CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGludCBpID0gbW47IGkgPCAoYmxvYzEgKyAxKSAqIEJsOyBpKyspIHsKICAgICAgICAgICAgYXV4ICs9IHJlc1tpXTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IGJsb2MxICsgMTsgaSA8IGJsb2MyOyBpKyspIHsKICAgICAgICAgICAgYXV4ICs9IGJsb2NbaV07CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSBibG9jMiAqIEJsOyBpIDw9IG14OyBpKyspIHsKICAgICAgICAgICAgYXV4ICs9IHJlc1tpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYXV4Owp9Cgp2b2lkIG1vKCkgewogICAgaW50IEIgPSBzcXJ0KDIgKiBOKTsKICAgIHNvcnQocXJ5ICsgMSwgcXJ5ICsgUSArIDEsIFtCXShRdWVyeSBhLCBRdWVyeSBiKSB7IHJldHVybiBtYWtlX3BhaXIoYS5sIC8gQiwgYS5yKSA8IG1ha2VfcGFpcihiLmwgLyBCLCBiLnIpOyB9KTsKICAgIGwgPSAxLCByID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IFE7IGkrKykgewogICAgICAgIHVwZGF0ZShpKTsKICAgICAgICBhbnNbcXJ5W2ldLmlkXSA9IHF1ZXJ5KHFyeVtpXS5tbiwgcXJ5W2ldLm14KTsKICAgIH0KfQoKCnZvaWQgc29sdmUoKSB7CiAgICBjaW4+Pk4+PlE7CiAgICB2ZWN0b3I8bGw+IGNvbXA7CiAgICBmb3IoaW50IGk9MTtpPD1OO2krKyl7CiAgICAgICAgY2luPj5hW2ldOwogICAgICAgIGNvbXAucGIoYVtpXSk7CiAgICB9CiAgICBzb3J0KGNvbXAuYmVnaW4oKSwgY29tcC5lbmQoKSk7CiAgICBjb21wLmVyYXNlKHVuaXF1ZShjb21wLmJlZ2luKCksIGNvbXAuZW5kKCkpLGNvbXAuZW5kKCkpOwogICAgZm9yKGludCBpPTE7aTw9TjtpKyspewogICAgICAgIGFbaV09IGxvd2VyX2JvdW5kKGNvbXAuYmVnaW4oKSwgY29tcC5lbmQoKSxhW2ldKS1jb21wLmJlZ2luKCk7CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1RO2krKyl7CiAgICAgICAgY2luPj5xcnlbaV0ubD4+cXJ5W2ldLnI+PnFyeVtpXS5tbj4+cXJ5W2ldLm14OwogICAgICAgIHFyeVtpXS5tbj0gbG93ZXJfYm91bmQoY29tcC5iZWdpbigpLCBjb21wLmVuZCgpLHFyeVtpXS5tbiktY29tcC5iZWdpbigpOwogICAgICAgIHFyeVtpXS5teD0gdXBwZXJfYm91bmQoY29tcC5iZWdpbigpLCBjb21wLmVuZCgpLHFyeVtpXS5teCktY29tcC5iZWdpbigpLTE7CiAgICAgICAgcXJ5W2ldLmlkPWk7CiAgICB9CiAgICBtbygpOwogICAgZm9yKGludCBpPTE7aTw9UTtpKyspewogICAgICAgIGNvdXQ8PGFuc1tpXTw8ZW5kbDsKICAgIH0KfQoKc2lnbmVkIG1haW4oKSB7CiAgICBGQVNUOwogICAgYXV0byBiZWdpbiA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKICAgIGxsIHQgPSAxOwogICAgLy9jaW4+PnQ7CiAgICB3aGlsZSAodC0tKSBzb2x2ZSgpOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgYXV0byBlbmQgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIGNvdXQgPDwgc2V0cHJlY2lzaW9uKDQpIDw8IGZpeGVkOwogICAgY291dCA8PCAiRXhlY3V0aW9uIHRpbWU6ICIgPDwgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4+KGVuZCAtIGJlZ2luKS5jb3VudCgpCiAgICAgICAgIDw8ICIgc2Vjb25kcyIgPDwgZW5kbDsKI2VuZGlmCn0KCgo=