#include <bits/stdc++.h>
using namespace std;
int main(){
    int n , q;
    cin >> n >> q;
    
    vector<int> a(n);
    for(int i=0;i<n;++i)cin >> a[i];
    
    vector<int> red = a;
    vector<vector<int>> queries;
    for(int i=0;i<q;++i){
        int l,r,v1,v2;
        cin >> l >> r >> v1 >> v2 ;
        
        queries.push_back({r,v2,i,1});
        queries.push_back({l,v1-1,i,-1});
        red.push_back(v2);
        red.push_back(v1-1);
    }
    
    sort(begin(red), end(red));
    red.erase( unique(begin(red), end(red)) , end(red));
    int m = red.size() + 2;
    
    sort(begin(queries), end(queries));
    vector<int> bit(m,0);
    
    auto update = [&](int index,int value)->void{
        for(;index<m;index+=index&-index)bit[index]+=value;
    };
    
    auto ask = [&](int index)->int{
        int ret=0;
        for(;index>0;index-=index&-index) ret += bit[index];
        return ret;
    };
    
    auto compressed_value = [&](int val)->int{
        return lower_bound(begin(red), end(red), val) - begin(red) + 1;
    };
    
    int it = 0;
    
    vector<int> answer(q,0);
    for(auto query : queries){
        const int value = compressed_value(query[1]);
        for(;it<n && it<=query[0];++it) update( compressed_value(a[it]), 1);
        answer[query[2]] += query[3] * ask(value);
    }
    
    for(int i=0;i<q;++i) cout << answer[i] << "\n" ;
}