rt
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 5e5 + 5;
struct Line {
int l, r, len;
} a[N];
int n, m, ans = 0x3f3f3f3f, ok;
int tmp[N << 1];
inline bool cmp(Line x, Line y) {
return x.len < y.len;
}
struct Segment {
struct Node {
int tag, mx;
} tr[N << 3];
inline void add(int k, int v) {
tr[k].mx += v;
tr[k].tag += v;
}
inline void pushdown(int k) {
if (!tr[k].tag) return ;
add(k << 1, tr[k].tag);
add(k << 1 | 1, tr[k].tag);
tr[k].tag = 0;
}
inline void pushup(int k) {
tr[k].mx = max(tr[k << 1].mx, tr[k << 1 | 1].mx);
}
inline void modify(int k, int l, int r, int L, int R, int v) {
if (l >= L && r <= R) return add(k, v), void();
int mid = (l + r) >> 1;
pushdown(k);
if (mid >= L) modify(k << 1, l, mid, L, R, v);
if (mid < R) modify(k << 1 | 1, mid + 1, r, L, R, v);
pushup(k);
}
} T;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1, l, r; i <= n; i++) {
cin >> l >> r;
a[i] = {l, r, r - l};
tmp[2 * i - 1] = l, tmp[2 * i] = r;
}
sort(tmp + 1, tmp + 1 + 2 * n);
int tot = unique(tmp + 1, tmp + 1 + 2 * n) - (tmp + 1);
for (int i = 1; i <= n; i++) {
a[i].l = lower_bound(tmp + 1, tmp + 1 + 2 * n, a[i].l) - tmp;
a[i].r = lower_bound(tmp + 1, tmp + 1 + 2 * n, a[i].r) - tmp;
}
sort(a + 1, a + 1 + n, cmp);
int l = 1, r = 1;
for (; r <= n; r++) {
T.modify(1, 1, tot, a[r].l, a[r].r, 1);
int len1 = a[r].len, len2 = 0, chk = 0;
while (T.tr[1].mx >= m && l < r) {
ok = 1;
chk = 1;
T.modify(1, 1, tot, a[l].l, a[l].r, -1);
len2 = a[l].len;
l++;
}
if (chk) ans = min(ans, len1 - len2);
}
if (ok) cout << ans;
else cout << -1;
return 0;
}