#pragma GCC target("avx", "avx2")
#include<iostream>
#include<random>
#include<chrono>
#include<vector>
#include<algorithm>
#define pb push_back
const int N = 2e6 + 10;
std::mt19937 rn(std::chrono::system_clock::now().time_since_epoch().count());
namespace IO{
char buf[70000000], *it = buf; void re(){it=buf;}
template <typename T> inline void rd(T&x){
for(x=0; !isdigit(*it); it++);
for(; isdigit(*it); ) x=x*10+*it++-'0';
}
template <typename T> inline void wt(T x){
static char st[20], *tp=st; if(!x) *it++='0';
while(x) *++tp=char(x%10+'0'), x/=10;
while(tp!=st) *it++=*tp--; *it++='\n';
}
void flush(){fwrite(buf, 1, it - buf, stdout);}
} using IO::rd, IO::wt, IO::re;
struct bst{
struct nd{int ls, rs, v, x, y, sz, tx, ty;}t[N];
nd&ls(int x){return t[t[x].ls];} nd&rs(int x){return t[t[x].rs];}
void pu(int p){t[p].sz = ls(p).sz + rs(p).sz + 1;}
void pt(int p,int x,int y){x?t[p].x=t[p].tx=x:0;y?t[p].y=t[p].ty=y:0;}
void pd(int p){auto&o=t[p];pt(o.ls,o.tx,o.ty),pt(o.rs,o.tx,o.ty),o.tx=o.ty=0;}
void spx(int p, int k, int&l, int&r){
if(!p) return l = r = 0, void(); pd(p);
if(t[p].x <= k) l = p, spx(t[p].rs, k, t[p].rs, r);
else r = p, spx(t[p].ls, k, l, t[p].ls); pu(p);
}
void spy(int p, int k, int&l, int&r){
if(!p) return l = r = 0, void(); pd(p);
if(t[p].y >= k) l = p, spy(t[p].rs, k, t[p].rs, r);
else r = p, spy(t[p].ls, k, l, t[p].ls); pu(p);
}
void spv(int p, int k, int&l, int&r){
if(!p) return l = r = 0, void(); pd(p);
if(t[p].x-t[p].y <= k) l = p, spv(t[p].rs, k, t[p].rs, r);
else r = p, spv(t[p].ls, k, l, t[p].ls); pu(p);
}
int mg(int l, int r){
if(!l || !r) return l + r; pd(l), pd(r);
if(t[l].v<t[r].v) return t[l].rs=mg(t[l].rs,r),pu(l),l;
else return t[r].ls=mg(l,t[r].ls),pu(r),r;
}
int szx(int p, int k){ int rs=0; while(p) pd(p),
t[p].x>k?p=t[p].ls:(rs+=ls(p).sz+1,p=t[p].rs); return rs;
}
int szy(int p, int k){ int rs=0; while(p) pd(p),
t[p].y<k?p=t[p].ls:(rs+=ls(p).sz+1,p=t[p].rs); return rs;
}
} T;
struct qu{int x, y, p;}; int n, m, ct, rt, x[N], y[N], rs[N];
int op[N], bx[N], by[N], qx[N], qy[N]; std::vector<int> vc[N];
template <class T, T(*op)(T, T), T(*e)()> struct bt{ T t[N];
bt(){for(int i = 1; i <= 1e6; i++) t[i] = e();}
void ad(int p, T x){while(p) t[p] = op(t[p], x), p -= p & -p;}
T qr(int p){T r=e(); while(p <= 1e6) r = op(r, t[p]), p += p & -p; return r;}
};
bt<int, [](int a, int b){return std::min(a, b);}, [](){return 1000001;}> tmn;
bt<int, [](int a, int b){return a + b;}, [](){return 0;}> tx, ty, tm;
bt<int, [](int a, int b){return std::max(a, b);}, [](){return 0;}> tmx;
int main(){
fread(IO::buf, 1, sizeof IO::buf, stdin);
std::vector<qu> q; rd(n), rd(m);
for(int i = 1; i <= n; i++) rd(x[i]), rd(y[i]), q.pb({x[i], y[i], i});
for(int i = 1; i <= m; i++) rd(op[i]),
rd(bx[i]), rd(by[i]), rd(qx[i]), rd(qy[i]), q.pb({bx[i], by[i], i + n});
std::sort(q.begin(), q.end(), [&](qu a, qu b)
{return a.x != b.x ? a.x > b.x : a.p > b.p;});
for(auto [x, y, p] : q) p > n ? tmn.ad(y, p - n) : vc[tmn.qr(y)].pb(p);
q.clear(); for(int i = 1; i <= n; i++) q.push_back({x[i], y[i], i});
for(int i = 1; i <= m; i++) q.push_back({qx[i], qy[i], i + n});
std::sort(q.begin(), q.end(), [&](qu a, qu b)
{return a.x != b.x ? a.x > b.x : a.p > b.p;});
for(auto [x, y, p] : q) p > n ? rs[p - n] = tm.qr(y + 1) : (tm.ad(y, 1), 0);
for(int i = 1; i <= n; i++) tx.ad(x[i], 1), ty.ad(y[i], 1); re();
for(int i = 1, sz = n, u, l, r, p; i <= m; i++){
T.spx(rt, bx[i], l, r), T.spy(l, by[i] + 1, p, u);
op[i] == 1 ? T.pt(u, 0, by[i]) : T.pt(u, bx[i], 0);
rt = T.mg(T.mg(p, u), r); for(auto v:vc[i]){
tx.ad(x[v], -1), ty.ad(y[v], -1), --sz;
op[i] == 1 ? y[v] = by[i] : x[v] = bx[i]; T.spv(rt, x[v] - y[v], l, r);
T.t[v] = {0, 0, (int)rn(), x[v], y[v], 1, 0, 0}; rt = T.mg(T.mg(l, v), r);
} tmx.ad(bx[i], by[i]); if(tmx.qr(qx[i] + 1)>qy[i]){wt(0);continue;}
rs[i] += sz + T.szx(rt, qx[i]) - T.szy(rt, qy[i] + 1);
rs[i] -= tx.qr(qx[i] + 1) + ty.qr(qy[i] + 1); wt(rs[i]);
} IO::flush();
}