#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#include<bitset>
#include<limits.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
void in(int &x){
char c=getchar(), f=1;
while ((c<'0' || c>'9') && c!='-') c=getchar();
if (c=='-') f=-1, c=getchar();
for (x=0; c>='0' && c<='9'; c=getchar())
x=x*10+c-'0';
x*=f;
}
void out(int x){
if (x<0) putchar('-'), x=-x;
if (x>0){
out(x/10);
putchar(x%10+'0');
}
}
struct ccf{
int l,r;
}a[500005];
int t[4000005],ad[4000005],p[4000005];
bool cmp(ccf x,ccf y){return (x.r-x.l)<(y.r-y.l);}
void add(int now,int l,int r,int x,int y,int k){
if(x==l&&r==y){
t[now]+=k;
ad[now]+=k;
return;
}
int mid=l+r>>1;
if(mid>=x)add(now*2,l,mid,x,min(mid,y),k);
if(mid+1<=y)add(now*2+1,mid+1,r,max(mid+1,x),y,k);
t[now]=max(t[now*2],t[now*2+1])+ad[now];
}
int main(){
int n,m;
int cnt=0;
in(n),in(m);
for(int i=1;i<=n;i++){
in(a[i].l),in(a[i].r);
p[++cnt]=a[i].l;
p[++cnt]=a[i].r;
}
sort(p+1,p+cnt+1);
int x=unique(p+1,p+cnt+1)-(p+1);
for(int i=1;i<=n;i++){
a[i].l=lower_bound(p+1,p+x+1,a[i].l)-p;
a[i].r=lower_bound(p+1,p+x+1,a[i].r)-p;
}
sort(a+1,a+n+1,cmp);
int j=1,ans=0x3f3f3f3f;
for(int i=1;i<=n;i++){
add(1,1,cnt,a[i].l,a[i].r,1);
while(t[1]>=m&&j<=i){
ans=min(ans,(a[i].r-a[i].l)-(a[j].r-a[j].l));
add(1,1,cnt,a[j].l,a[j].r,-1);
j++;
}
}if(ans==0x3f3f3f3f)printf("-1");
else printf("%d\n",ans);
return 0;
}