刚学oi的蒟蒻 参考 oiwiki
#include<bits/stdc++.h>
#define code using
#define by namespace
#define yzjznb std
code by yzjznb;
const int N = 1e7+5;
#define ll long long
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
void write(ll x)
{
if(x>9) write(x/10);
putchar(x%10|48);
}
ll n=read(),d=read(),qmax[N],qmin[N],ans; //单调队列qmax维护最大值 ,qmin同理
ll hmax,hmin,tmax,tmin;
struct water
{
ll x,y;
bool operator<(const water &a) const{
return x<a.x;//按x排序
}
}a[N];//记录水滴
void solve()
{
hmax=hmin=1,tmax=tmin=0;// 初始化
ll l=1;//花盆左起点
ans=2e9;
for(int i=1;i<=n;i++)
{
while(hmax<=tmax&&a[i].y>a[qmax[hmax]].y) tmax--;
qmax[++tmax]=i;
while(hmin<=tmin&&a[i].y<a[qmin[hmin]].y) tmin--;
qmin[++tmin]=i;
while(l<=i&&a[qmax[hmax]].y-a[qmin[hmin]].y>=d)
{
ans=min(ans,a[i].x-a[l].x);
l++;
while(hmax<=tmax&&qmax[hmax]<l) hmax++;
while(hmin<=tmin&&qmin[hmin]<l) hmin++;
}
}
}
int main(){
for(int i=1;i<=n;i++)
a[i].x=read(),a[i].y=read();//输入
sort(a+1,a+1+n);
solve();
if(ans<2e9) printf("%lld\n",ans);
else puts("-1");
return 0;
}