// I may fail a thousand times
// But there is no giving up
// IOI - here I come
#include <bits/stdc++.h>
using namespace std;
const int N=2e5;
const int M=2e6;
set<int> s;
map<int,int> mp;
vector<int> upd[M+5];
vector<int> qry[M+5];
int cur,lo[N+5],hi[N+5],l[N+5],h[N+5],x[N+5],ans[N+5];
int tree[M+5];
void update(int v,int k){
	for(;v<=M;v+=(v&-v)){
		tree[v]+=k;
	}
}
int query(int v){
	int ret=0;
	for(;v;v-=(v&-v)){
		ret+=tree[v];
	}
	return ret;
}
void solve(){
	int n,m;cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>lo[i]>>hi[i];
		s.insert(lo[i]);
		s.insert(hi[i]+1);
	}
	for(int i=1;i<=m;i++){
		cin>>l[i]>>h[i]>>x[i];
		s.insert(l[i]);
		s.insert(h[i]);
		s.insert(x[i]);
	}
	for(int i:s)mp[i]=++cur;
	for(int i=1;i<=n;i++){
		upd[mp[lo[i]]].push_back(i);
		upd[mp[hi[i]+1]].push_back(-i);
	}
	for(int i=1;i<=m;i++){
		qry[mp[x[i]]].push_back(i);
	}
	for(int i=1;i<=cur;i++){
		for(int j:upd[i]){
			if(j>0)update(j,1);
			else update(-j,-1);
		}
		for(int j:qry[i]){
			ans[j]=query(mp[h[j]])-query(mp[l[j]]-1);
		}
	}
	for(int i=1;i<=m;i++)cout<<ans[i]<<'\n';
}
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t=1;
	for(;t;t--){
		solve();
	} 	
	return 0;
}