#2数据在vscode里卡爆终端,在洛谷IDE里提示输入长度不合法
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,D;
struct node
{
int x,y;
}rain[100005];
bool cmp(node a,node b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<=b.x;
}
int que1[100005],que2[100005];
int qf,qr,qf1,qr1,qr2,qf2,mn;
int ans=1e9;
signed main(){
cin>>n>>D;
for(int i=1;i<=n;i++)
{
cin>>rain[i].x>>rain[i].y;
}
sort(rain+1,rain+n+1,cmp);//按x从小到大排序,若x相等,则按y排序
qf=qr=-1;
int r=1;
int mx=mn=rain[1].y;
for(int l=1;l<=n;l++){//l表示花盆的左端点
while(r<n&&mx-mn<D){//r表示花盆的右端点
r++;
while(qf1<qr1&&rain[r].y>=rain[que1[qr1]].y){//求最大值
qr1--;
}
que1[++qr1]=r;
mx=rain[que1[qf1+1]].y;
while(qf2<qr2&&rain[r].y<=rain[que2[qr2]].y){//求最小值
qr2--;
}
que2[++qr2]=r;
mn=rain[que2[qf2+1]].y;
}
if(mx-mn>=D){
ans=min(ans,rain[r].x-rain[l].x);//更新答案
}
while(qf1<qr1&&que1[qf1+1]<l+1){
qf1++;
}
mx=rain[que1[qf1+1]].y;
while(qf2<qr2&&que1[qf2+1]<l+1){
qf2++;
}
mn=rain[que2[qf2+1]].y;
}
if(ans==1e9)cout<<"-1";
else cout<<ans;
return 0;
}