#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector<pair<ll,ll>>V(200010);
vector<pair<pair<ll,ll>,ll>>query(200010);
vector<vector<ll>>fenwick(21,vector<ll>(200010));
void update(ll koji,ll idx,ll n,ll val)
{
    ll tmp=idx;
    while(koji<=20)
    {
        while(idx<=n)
        {
            fenwick[koji][idx]+=val;
            idx+= idx & -idx;
        }
        idx=tmp;
        koji++;
    }
}
ll get(ll koji,ll idx)
{
    ll ret=0;
    while(idx>=1)
    {
        ret+=fenwick[koji][idx];
        idx-=idx&-idx;
    }
    return ret;
}
void bf(ll n,ll m)
{
    for(ll i=0;i<m;i++)
    {
        ll l=query[i].first.first,r=query[i].first.second,x=query[i].second,b=0;
        l--;r--;
        for(ll j=l;j<=r;j++)
        {
            if(V[j].first<=x&&V[j].second>=x) b++;
        }
        cout << b << endl;
    }
}
void f(ll n,ll m)
{
    for(ll i=0;i<n;i++)
    {
        update(V[i].first,i+1,n,1);
        update(V[i].second+1,i+1,n,-1);
    }
    for(ll i=0;i<m;i++)
    {
        ll l=query[i].first.first,r=query[i].first.second,x=query[i].second;
        cout << get(x,r)-get(x,l-1) << endl;
    }
}
void zadnji(ll n,ll m)
{
    map<ll,vector<ll>>M;
    for(ll i=0;i<n;i++)
    {
        M[V[i].first].push_back(i+1);
    }
    for(ll i=0;i<m;i++)
    {
        ll l=query[i].first.first,r=query[i].first.second,x=query[i].second;
        vector<ll>tmp=M[x];
        if(tmp.size()==0)
        {
            cout << 0 << endl;
            continue;
        }
        ll imam=tmp.size();
        ll L=0,R=tmp.size()-1,ans=-1;
        while(L<=R)
        {
            ll mid = (L+R)/2;
            if(tmp[mid]<l)
            {
                ans=mid;
                L=mid+1;
            }
            else R=mid-1;
        }
        imam-=ans+1;
        L=0,R=tmp.size()-1,ans=-1;
        while(L<=R)
        {
            ll mid=(L+R)/2;
            if(tmp[mid]>r)
            {
                ans=mid;
                R=mid-1;
            }
            else L=mid+1;
        }
        if(ans!=-1) imam-=n-ans-1;
        cout << imam << endl;
    }
}
int main(int argc, char *argv[])
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    ll n,m,maks=0;
    cin >> n >> m;
    bool isti=true;
    for(ll i=0;i<n;i++)
    {
        cin >> V[i].first >> V[i].second;
        if(V[i].first!=V[i].second) isti=false;
     }
    for(ll i=0;i<m;i++)
    {
        cin >> query[i].first.first >> query[i].first.second >> query[i].second;
        maks=max(maks,query[i].first.second);
    }
    if(n<=1000&&m<=1000)
    {
        bf(n,m);
        return 0;
    }
    if(maks<=20)
    {
        f(n,m);
        return 0;
    }
    if(isti)
    {
        zadnji(n,m);
        return 0;
    }
}