#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define xx first
#define yy second
#define ff(i,s,f) for(int i=s;i<f;i++)
#define fb(i,s,f) for(int i=(s)-1;i>=f;i--)
#define ffi(i,s,f) for(int i=s;i<=f;i++)
#define fbi(i,s,f) for(int i=s;i>=f;i--)
#define srt(a) sort(a.begin(),a.end());
#define srtg(a,int) sort(a.begin(),a.end(),greater<int>())
#define lb(a,x) lower_bound(a.begin(),a.end(),x)
#define ub(a,x) upper_bound(a.begin(),a.end(),x)
#define fnd(a,x) find(a.begin(),a.end(),x)
#define ios ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef string str;

const int maxn=2e5+10;

array<int,maxn> segtd_a[22];
array<int,maxn> segtd_l[22];
array<int,maxn> segtd_r[22];

array<int,maxn> segtu_a[22];
array<int,maxn> segtu_l[22];
array<int,maxn> segtu_r[22];

int ml[maxn];
int mr[maxn];

int n,m;
int d[maxn];
int u[maxn];

void build(int *a,array<int,maxn>* segt_a,array<int,maxn>* segt_l,array<int,maxn>* segt_r,int node=1,int l=0,int r=n-1,int dub=0){
    if(l==r){
        segt_a[dub][l]=a[l];
        return;
    }
    int mid=l+(r-l)/2;
    build(a,segt_a,segt_l,segt_r,2*node,l,mid,dub+1);
    build(a,segt_a,segt_l,segt_r,2*node+1,mid+1,r,dub+1);
    int pl=0,pr=0;
    auto vl=segt_a[dub+1].begin()+l;
    auto vr=segt_a[dub+1].begin()+mid+1;
    int vls=mid-l+1;
    int vrs=r-mid;
    for(int i=vls-1;i>=0;i--){
        ml[i]=i;
        if(i<vls-1 && vl[i]==vl[i+1]) ml[i]=ml[i+1];
    }
    for(int i=vrs-1;i>=0;i--){
        mr[i]=i;
        if(i<vrs-1 && vr[i]==vr[i+1]) mr[i]=mr[i+1];
    }
    int tren=l;
    while(pl<vls || pr<vrs){
        if(pl==vls){
            segt_a[dub][tren]=(vr[pr]);
            segt_l[dub][tren]=(int(pl)-1);
            segt_r[dub][tren]=(mr[pr]);
            tren++;
            pr++;
        }else if(pr==vrs){
            segt_a[dub][tren]=(vl[pl]);
            segt_l[dub][tren]=(ml[pl]);
            segt_r[dub][tren]=(int(pr)-1);
            tren++;
            pl++;
        }else{
            if(vl[pl]<=vr[pr]){
                segt_a[dub][tren]=(vl[pl]);
                segt_l[dub][tren]=(ml[pl]);
                if(vl[pl]==vr[pr]) segt_r[dub][tren]=(mr[pr]);
                else segt_r[dub][tren]=(int(pr)-1);
                pl++;
            }else{
                segt_a[dub][tren]=(vr[pr]);
                segt_l[dub][tren]=(int(pl)-1);
                segt_r[dub][tren]=(mr[pr]);
                pr++;
            }
            tren++;
        }
    }
}

int iter=0;

int query(array<int,maxn>* segt_a,array<int,maxn>* segt_l,array<int,maxn>* segt_r,int tl,int tr,int x,int node,int l=0,int r=n-1,int dub=0){
    iter++;
    if(tl<=l && r<=tr){
        return x+1;
    }
    int mid=l+(r-l)/2;
    int ret=0;
    if(tl<=mid) ret+=query(segt_a,segt_l,segt_r,tl,tr,(x!=-1 ? segt_l[dub][l+x]:-1),2*node,l,mid,dub+1);
    if(tr>mid) ret+=query(segt_a,segt_l,segt_r,tl,tr,(x!=-1 ? segt_r[dub][l+x]:-1),2*node+1,mid+1,r,dub+1);
    return ret;
}

int query(array<int,maxn>* segt_a,array<int,maxn>* segt_l,array<int,maxn>* segt_r,int l,int r,int x){
    int poz=upper_bound(segt_a[0].begin(),segt_a[0].begin()+n,x)-segt_a[0].begin()-1;
    return query(segt_a,segt_l,segt_r,l,r,poz,1);
}

void solve(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>d[i]>>u[i];
        if(d[i]>u[i]) swap(d[i],u[i]);
    }
    build(d,segtd_a,segtd_l,segtd_r);
    build(u,segtu_a,segtu_l,segtu_r);
    while(m--){
        int l,r,x;
        cin>>l>>r>>x;
        if(l>r) swap(l,r);
        l--; r--;
        cout<<query(segtd_a,segtd_l,segtd_r,l,r,x)-query(segtu_a,segtu_l,segtu_r,l,r,x-1)<<"\n";
    }
}

int main(){
    ios;
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}