1 #include<bits/stdc++.h>
2 #define _for(i,a,b) for(register int i = (a);i < b;i ++)
3 #define _rep(i,a,b) for(register int i = (a);i > b;i --)
4 #define INF 0x3f3f3f3f
5 #define MOD 100000000
6 #define maxn 1000003
7 #define pb push_back
8 #define debug() printf("Miku Check OK!\n")
9 typedef long long ll;
10
11 using namespace std;
12
13 inline ll read()
14 {
15 ll ans = 0;
16 char ch = getchar(), last = ' ';
17 while(!isdigit(ch)) last = ch, ch = getchar();
18 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
19 if(last == '-') ans = -ans;
20 return ans;
21 }
22 inline void write(ll x)
23 {
24 if(x < 0) x = -x, putchar('-');
25 if(x >= 10) write(x / 10);
26 putchar(x % 10 + '0');
27 }
28 struct Point
29 {
30 int x;
31 int y;
32 bool operator < (Point b)
33 {
34 return x < b.x;
35 }
36 };
37 struct Num
38 {
39 int x;
40 int y;
41 };
42
43 int n,d;
44 Point in[maxn];
45 Num qMax[maxn];
46 Num qMin[maxn];
47 int ans = INT_MAX;
48 bool C(int m)
49 {
50 int frontMax,backMax;
51 int frontMin,backMin;
52 frontMax = 1,backMax = 0;
53 frontMin = 1,backMin = 0;
54 _for(i,1,n+1)
55 {
56 while(frontMax <= backMax && qMax[frontMax].x + m < in[i].x)
57 frontMax ++;
58
59 while(frontMin <= backMin && qMin[frontMin].x + m < in[i].x)
60 frontMin ++;
61
62 while(frontMax <= backMax && qMax[backMax].y <= in[i].y)
63 backMax --;
64 backMax ++;
65 qMax[backMax].y = in[i].y;
66 qMax[backMax].x = in[i].x;
67
68 while(frontMin <= backMin && qMin[backMin].y >= in[i].y)
69 backMin --;
70 backMin ++;
71 qMin[backMin].y = in[i].y;
72 qMin[backMin].x = in[i].x;
73
74 int dd = qMax[frontMax].y-qMin[frontMin].y;
75 if(dd >= d)
76 return true;
77 }
78 return false;
79 }
80 int solve()
81 {
82 int lb = in[1].x,ub = in[n].x+5;
83 while(lb < ub)
84 {
85 int mid = (lb+ub)/2;
86 if(C(mid)) ub = mid;
87 else lb = mid+1;
88 }
89 return lb;
90 }
91 int main()
92 {
93 // freopen("testdata (4).in","r+",stdin);
94 n = read(),d = read();
95 _for(i,1,n+1)
96 {
97 in[i].x = read();
98 in[i].y = read();
99 }
100
101 sort(in+1,in+n+1);
102 ans = solve();
103 if(ans > in[n].x)
104 write(-1);
105 else
106 write(ans);
107 return 0;
108 }