#include <bits/stdc++.h>
using namespace std;
const int N=3e5+5;
const int M=1e6;
bool vis[N];
int n, m, cnt, ans[N<<1];
struct Node { int a, b, c; bool fl; }pre[N<<1], cdq[N<<1], num[N<<1];
struct Tree {
int tr[(M<<1)+5];
int lowbit(int x) { return x&-x; }
void Add(int u, int x) {
u=u+M+1;
for(; u<=M*2; u+=lowbit(u)) tr[u]=max(tr[u], x);
}
void Cov(int u, int x) {
u=u+M+1;
for(; u<=M*2; u+=lowbit(u)) tr[u]=x;
}
int Ask(int u) {
int sum=0; u=u+M+1;
for(; u; u-=lowbit(u)) sum=max(sum, tr[u]);
return sum;
}
}dis;
inline int read() {
int x=0,fl=1; register char ch=getchar();
for( ; !isdigit(ch); fl=ch=='-'?-1:1, ch=getchar());
for( ; isdigit(ch); x=(x<<3)+(x<<1)+(ch^48), ch=getchar());
return fl==1?x:-x;
}
void CDQsolve(int l, int r) {
if(l==r) return;
int mid=(l+r)>>1;
CDQsolve(l, mid);
CDQsolve(mid+1, r);
int p=l, q=mid+1;
for(int tot=1; tot<=r-l+1; ++tot) {
if(p>mid) {
while(q<=r) {
num[tot++]=cdq[q];
if(cdq[q].fl) ans[cdq[q].a]=min(ans[cdq[q].a], cdq[q].b+cdq[q].c-dis.Ask(cdq[q].c)); q++;
} break; }
if(q>r) {
while(p<=mid) num[tot++]=cdq[p], p++;
break;
}
if(cdq[p].b<cdq[q].b || (cdq[p].b==cdq[q].b && !cdq[p].fl)) { num[tot]=cdq[p]; if(!cdq[p].fl) dis.Add(cdq[p].c, cdq[p].b+cdq[p].c); p++; }
else { num[tot]=cdq[q]; if(cdq[q].fl) ans[cdq[q].a]=min(ans[cdq[q].a], cdq[q].b+cdq[q].c-dis.Ask(cdq[q].c)); q++; }
}
for(int i=l; i<=mid; ++i) if(!cdq[i].fl) dis.Cov(cdq[i].c, -1e9);
for(int i=1; i<=r-l+1; ++i) cdq[i+l-1]=num[i];
}
int main() {
n=read();
m=read();
for(int i=1; i<=n; ++i) {
cdq[i].a=0;
cdq[i].b=read();
cdq[i].c=read();
cdq[i].fl=0;
}
for(int i=1; i<=m; ++i) {
cdq[i+n].a=i;
cdq[i+n].fl=read()-1;
vis[i]=cdq[i+n].fl;
cdq[i+n].b=read();
cdq[i+n].c=read();
}
sort(cdq+1, cdq+n+m+1, [=](const Node &x, const Node &y){ return x.a<y.a; });
for(int i=1; i<=n+m; ++i) pre[i]=cdq[i];
memset(ans, 0x3f, sizeof(ans));
memset(dis.tr, 128, sizeof(dis.tr));
CDQsolve(1, n+m);
for(int i=1; i<=n+m; ++i) cdq[i]=pre[i], cdq[i].b=-cdq[i].b;
CDQsolve(1, n+m);
for(int i=1; i<=n+m; ++i) cdq[i]=pre[i], cdq[i].c=-cdq[i].c;
CDQsolve(1, n+m);
for(int i=1; i<=n+m; ++i) cdq[i]=pre[i], cdq[i].b=-cdq[i].b, cdq[i].c=-cdq[i].c;
CDQsolve(1, n+m);
for(int i=1; i<=m; ++i) if(vis[i]) printf("%d\n", ans[i]);
return 0;
}