#include <bits/stdc++.h>
using namespace std;
int nextInt() {
  int x = 0, p = 1;
  char c;
  do {
    c = getchar();
  } while (c <= 32);
  if (c == '-') {
    p = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * p;
}
const int N = (int)3e5 + 5;
const int MAX_VAL = (int)1e9;
int n;
long long l[N], r[N];
struct event {
  long long x;
  int c;
  event() {}
  event(long long x, int c) : x(x), c(c) {}
};
pair<long long, int> check(long long len) {
  if (len == 0) return make_pair(0LL, n);
  static vector<event> evs;
  evs.resize(0);
  for (int i = 1; i <= n; i++) {
    if (r[i] - len > l[i]) {
      evs.push_back(event(l[i], 1));
      evs.push_back(event(r[i] - len, -1));
    }
  }
  sort((evs).begin(), (evs).end(),
       [](const event& a, const event& b) { return a.x < b.x; });
  reverse((evs).begin(), (evs).end());
  int cnt = 0, maxiCnt = 0;
  long long bestPos = 0;
  while (evs.size() > 0) {
    long long x = evs.back().x;
    while (evs.size() > 0 && evs.back().x == x) {
      cnt += evs.back().c;
      evs.pop_back();
    }
    if (cnt > maxiCnt) {
      maxiCnt = cnt;
      bestPos = x;
    }
  }
  return make_pair(bestPos, maxiCnt);
}
vector<int> getAns(long long len) {
  if (len == 0) {
    vector<int> res(n);
    iota((res).begin(), (res).end(), 1);
    return res;
  }
  long long pos = check(len).first;
  vector<int> res;
  for (int i = 1; i <= n; i++) {
    if (pos >= l[i] && pos < r[i] - len) {
      res.push_back(i);
    }
  }
  return res;
}
int main() {
  n = nextInt();
  int k = nextInt();
  for (int i = 1; i <= n; i++) {
    l[i] = nextInt();
    r[i] = nextInt() + 2;
  }
  long long l = 0, r = MAX_VAL + MAX_VAL + 5;
  while (r - l > 1) {
    long long mid = (l + r) >> 1;
    if (check(mid).second >= k)
      l = mid;
    else
      r = mid;
  }
  vector<int> ans = getAns(l);
  cout << l << endl;
  assert((int)ans.size() >= k);
  ans.resize(k);
  for (int i : ans) {
    printf("%d ", i);
  }
  puts("");
}
