#include <bits/stdc++.h>
typedef long long LL;
#define SORT(c) sort((c).begin(),(c).end())

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)

using namespace std;
int main(void)
{
  int n,m;
  cin >> n >> m;
  vector<pair<int,int> > tre(n);
  REP(i,n) cin >> tre[i].first >> tre[i].second;
  set<int> sx,sy;
  REP(i,n){
    sx.insert(tre[i].first);
    sy.insert(tre[i].second);
  }
  sx.insert(-1023456789);
  sy.insert(-1023456789);
  sx.insert(1023456789);
  sy.insert(1023456789);
  vector<int> vx(sx.begin(),sx.end()),vy(sy.begin(),sy.end());
  vector<vector<int> > fi(vx.size(),vector<int>(vy.size(),0));
  REP(i,n){
    int x=lower_bound(vx.begin(),vx.end(),tre[i].first)-vx.begin();
    int y=lower_bound(vy.begin(),vy.end(),tre[i].second)-vy.begin();
    ++fi[x][y];
  }
  REP(i,vx.size()) REP(j,vy.size()-1) fi[i][j+1]+=fi[i][j];
  REP(i,vx.size()-1) REP(j,vy.size()) fi[i+1][j]+=fi[i][j];
  REP(i,m){
    int tmp;
    cin >> tmp;
    int x0=upper_bound(vx.begin(),vx.end(),tmp-1)-vx.begin()-1;
    cin >> tmp;
    int y0=upper_bound(vy.begin(),vy.end(),tmp-1)-vy.begin()-1;
    cin >> tmp;
    int x1=upper_bound(vx.begin(),vx.end(),tmp)-vx.begin()-1;
    cin >> tmp;
    int y1=upper_bound(vy.begin(),vy.end(),tmp)-vy.begin()-1;
    cout << fi[x1][y1]-fi[x0][y1]-fi[x1][y0]+fi[x0][y0] << endl;
  }
  return 0;
}