//#define LOCAL#include<bits/stdc++.h>usingnamespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf("this is a input\n")#define fi first#define se second#define mk(a, b) make_pair(a,b)#define pb push_back#define LF putchar('\n')#define SP putchar(' ')#define p_queue priority_queue#define CLOSE ios::sync_with_stdio(0); cin.tie(0)#define sz(a) (int)a.size()#define pii pair <int,int>template<typename T>voidread(T &x){x =0;char ch =getchar();ll f =1;while(!isdigit(ch)){if(ch =='-')f *=-1;ch =getchar();}while(isdigit(ch)){x = x *10+ ch -48; ch =getchar();}x *= f;}template<typename T,typename... Args>voidread(T &first, Args&... args){read(first);read(args...);}template<typename T>voidwrite(T arg){T x = arg;if(x <0){putchar('-'); x =- x;}if(x >9){write(x /10);}putchar(x %10+'0');}template<typename T,typename... Ts>voidwrite(T arg, Ts ... args){write(arg);if(sizeof...(args)!=0){putchar(' ');write(args ...);}}usingnamespace std;
ll gcd(ll a, ll b){return b ==0? a :gcd(b, a % b);}
ll lcm(ll a, ll b){return a /gcd(a, b)* b;}constint N =5e5+5;int n , m;int tot =0, ans[N];struct ques {int x, y, id, op;booloperator<(const ques& no)const{return x < no.x;}}q[N *5];struct point {int x, y;booloperator<(const point& no)const{return x < no.x;}}v[N];struct BIT
{int tree[10000005];int ed =10000001;voidinit(){mem(tree,0);}intlowbit(int k){return k &-k;}voidadd(int x ,int k)//注意值域{while(x <= ed){
tree[x]+= k ;
x +=lowbit(x);}}intsum(int x){int ans =0;while(x !=0){
ans += tree[x];
x -=lowbit(x);}return ans ;}intquery(int l ,int r){returnsum(r)-sum(l -1);}} bit ;intmain(){
CLOSE;
bit.init();
cin >> n >> m;for(int i =1; i <= n ; i ++){
cin >> v[i].x >> v[i].y;
v[i].x +=1, v[i].y +=1;}for(int i =1; i <= m ; i ++){int a, b, c, d;
cin >> a >> b >> c >> d;
a +=1, b +=1, c +=1, d +=1;
q[++ tot]={c, d, i,1};
q[++ tot]={a-1, d, i,-1};
q[++ tot]={c, b-1, i,-1};
q[++ tot]={a-1, b-1, i,1};}
sort (v +1, v +1+ n);
sort (q +1, q +1+ tot);int now =1;for(int i =1; i <= tot ; i ++){while(v[now].x <= q[i].x && now <= n)
bit.add(v[now].y,1), now ++;
ans[q[i].id]+= q[i].op * bit.sum (q[i].y);}for(int i =1; i <= m ; i ++)
cout << ans[i]<< endl;}
constint N =2e6+5;int n;struct BIT
{int tree[1000005];int ed =1e6+5;voidinit(){mem(tree,0);}intlowbit(int k){return k &-k;}voidadd(int x ,int k)//注意值域{while(x <= ed){
tree[x]+= k ;
x +=lowbit(x);}}intsum(int x){int ans =0;while(x !=0){
ans += tree[x];
x -=lowbit(x);}return ans ;}} bit ;int ans[N];struct node
{int x, y, id;booloperator<(const node& no)const{if(x == no.x)return y < no.y;return x > no.x;}}p[N];int a[N];intmain(){
CLOSE ;
cin >> n;for(int i =1; i <= n ; i ++)
cin >> p[i].x >> p[i].y, p[i].id = i;
sort (p +1, p +1+ n);for(int i =1; i <= n ; i ++)
a[i]= p[i].y;
sort (a +1, a +1+ n);int len = unique (a +1, a +1+ n)- a -1;for(int i =1; i <= n ; i ++){int idx =lower_bound(a+1,a+1+len,p[i].y)- a;
ans[p[i].id]+= bit.sum(idx);
bit.add (idx,1);}for(int i =1; i <= n ; i ++)
cout << ans[i]<< endl;