#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+6;
int n,m,siz,a[N],minn,maxn;
struct node{int l,r,z;}e[N];
bool cmp(node a,node b){return a.z<b.z;}
int tree[N<<4],tag[N<<4];
int ls(int p) {return p<<1;}
int rs(int p) {return p<<1|1;}
void push_up(int p){
tree[p]=max(tree[ls(p)],tree[rs(p)]);
}
void addtag(int p,int pl,int pr,int d){
tag[p]+=d;
tree[p]+=d*(pr-pl+1);
}
void push_down(int p,int pl,int pr){
if(tag[p]){
int mid=(pl+pr)>>1;
addtag(ls(p),pl,mid,tag[p]);
addtag(rs(p),mid+1,pr,tag[p]);
tag[p]=0;
}
}
void update(int p,int L,int R,int pl,int pr,int d){
if(L<=pl&&R>=pr){
addtag(p,pl,pr,d);
return;
}
int mid=(pl+pr)>>1;
push_down(p,pl,pr);
if(L<=mid)update(ls(p),L,R,pl,mid,d);
if(R>mid)update(rs(p),L,R,mid+1,pr,d);
push_up(p);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
a[i*2]=x,a[i*2+1]=y;
e[i].l=x,e[i].r=y,e[i].z=y-x;
}
sort(a+1,a+n*2+2);
siz=unique(a+1,a+n*2+1)-(a+1);
sort(e+1,e+1+n,cmp);
minn=N;
for(int i=1;i<=n;i++){
e[i].l=lower_bound(a+1,a+siz+1,e[i].l)-a;
e[i].r=lower_bound(a+1,a+siz+1,e[i].r)-a;
// cout<<e[i].l<<" "<<e[i].r<<" ";
minn=min(minn,e[i].l),maxn=max(maxn,e[i].r);
}
int s=0,t=0,ans=1e9;
while(t<n){
while(tree[1]<m&&t<=n){
t++;
update(1,e[t].l,e[t].r,minn,maxn,1);
}
if(tree[1]<m)break;
while(tree[1]>=m&&t>=s){
s++;
update(1,e[s].l,e[s].r,minn,maxn,-1);
}
ans=min(ans,e[t].z-e[s].z);
// cout<<e[t].z<<" "<<e[s].z<<endl;
}
if(ans==1e9)ans=-1;
cout<<ans;
return 0;
}