#include<bits/stdc++.h>
#define ll long long
using namespace std;
mt19937_64 rng;
ll N,Q,up[200005],low[200005],st[525000],K,pok;
void dodaj(int gde){
	gde+=K-1;
	st[gde]=1;
	gde/=2;
	while(gde){
		st[gde]=st[gde*2]+st[gde*2+1];
		gde/=2;
	}
	return;
}
int get(int gde,int lg,int dg,int lc,int dc){
	if(lg==lc and dg==dc)
		return st[gde];
	int sred=(lc+dc)/2;
	if(dg<=sred)
		return get(gde*2,lg,dg,lc,sred);
	if(lg>sred)
		return get(gde*2+1,lg,dg,sred+1,dc);
	return get(gde*2,lg,sred,lc,sred)+get(gde*2+1,sred+1,dg,sred+1,dc);
}
struct query{
	int L,R,id;
	ll X,rez;
}upiti[200005];
struct slog{
	int gde;
	ll vred;
}niz[200005];
bool povred(slog a,slog b){
	return a.vred<b.vred;
}
bool povred2(slog a,slog b){ ///Kao povred, al obrnuto
	return a.vred>b.vred;
}
bool pox(query a,query b){
	return a.X<b.X;
}
bool pox2(query a,query b){
	return a.X>b.X;
}
bool poredu(query a,query b){
	return a.id<b.id;
}
ll mil=1e9;
int main(){
    rng.seed(time(NULL));
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	N=200000;Q=200000;
    //cin>>N>>Q;
	K=1;
	while(K<N)
		K*=2;
	for(int i=1;i<=N;i++){
		low[i]=rng()%mil+1;
        up[i]=rng()%mil+1;
        if(low[i]>up[i])
            swap(low[i],up[i]);
    }
	for(int i=1;i<=Q;i++){
		upiti[i].id=i;
		//cin>>upiti[i].L>>upiti[i].R>>upiti[i].X;
		upiti[i].L=rng()%N+1;
        upiti[i].R=rng()%N+1;
        if(upiti[i].L>upiti[i].R)
            swap(upiti[i].L,upiti[i].R);
        upiti[i].X=rng()%mil+1;
        upiti[i].rez=upiti[i].R-upiti[i].L+1;/// Stavi sve i oduzmi lose
	}

	/// Oduzimamo one gde je u<x
	sort(upiti+1,upiti+1+Q,pox);
	for(int i=1;i<=N;i++){
		niz[i].gde=i;
		niz[i].vred=up[i];
	}
	sort(niz+1,niz+1+N,povred);
	pok=1;
	for(int i=1;i<=Q;i++){
		while(niz[pok].vred<upiti[i].X and pok<=N){
			dodaj(niz[pok].gde);
			pok++;
		}
		upiti[i].rez-=get(1,upiti[i].L,upiti[i].R,1,K);
	}

	for(int i=K+K;i>=1;i--)
		st[i]=0;
	/// Oduzimamo one gde je l>x
	sort(upiti+1,upiti+1+Q,pox2);
	for(int i=1;i<=N;i++){
		niz[i].gde=i;
		niz[i].vred=low[i];
	}
	sort(niz+1,niz+1+N,povred2);
	pok=1;
	for(int i=1;i<=Q;i++){
		while(niz[pok].vred>upiti[i].X and pok<=N){
			dodaj(niz[pok].gde);
			pok++;
		}
		upiti[i].rez-=get(1,upiti[i].L,upiti[i].R,1,K);
	}

	sort(upiti+1,upiti+1+Q,poredu);
	for(int i=1;i<=Q;i++)
		cout<<upiti[i].rez<<"\n";
	return 0;
}