#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,k,ans,ll,rr;
struct fre {
int l,r,id;
} a[N];
struct xgd {
int l,r;
int dat;
int key;
} v[N];
int root,cnt,tot;
int make(int val) {
v[++cnt].dat=val;
v[cnt].key=rand();
tot++;
return cnt;
}
int merge(int r1,int r2) {
if(!r1||!r2) return r1+r2;
if(v[r1].dat>=v[r2].dat) {
if(v[r1].key<=v[r2].key) v[r2].l=merge(r1,v[r2].l);
else v[r2].r=merge(r1,v[r2].r);
return r2;
} else {
if(v[r2].key<=v[r1].key) v[r1].l=merge(v[r1].l,r2);
else v[r1].r=merge(v[r1].r,r2);
return r1;
}
}
void take(int val) {
root=merge(root,make(val));
}
void del() {
root=merge(v[root].l,v[root].r);
tot--;
}
bool cmp(fre x,fre y) {
if(x.l==y.l) return x.r<y.r;
return x.l<y.l;
}
int main() {
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++) {
scanf("%d %d",&a[i].l,&a[i].r);
a[i].id=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++) {
take(a[i].r);
while(tot>k) del();
if(tot==k) {
if(ans<v[root].dat-a[i].l) {
ll=a[i].l;
rr=v[root].dat;
ans=rr-ll;
}
}
}
cout<<ans<<endl;
tot=0;
for(int i=1;i<=n;i++) {
if(a[i].l<=ll&&a[i].r>=rr) {
printf("%d ",a[i].id);
tot++;
if(tot==k) break;
}
}
}