#include <bits/stdc++.h>
using namespace std;
int n, m;
struct node {
  int l, r;
  bool operator<(const node &x) const { return l < x.l; }
} p[300010], q[300010];
int hx[300010 * 2], hy[300010 * 2], sum[300010 * 2];
int findf(int xx) {
  int l = 1, r = hy[0];
  while (l <= r) {
    int mid = l + r >> 1;
    if (hy[mid] > xx)
      r = mid - 1;
    else if (hy[mid] < xx)
      l = mid + 1;
    else
      return mid;
  }
}
bool check(int x) {
  hx[0] = hy[0] = 0;
  memset(sum, 0, sizeof(sum));
  for (int i = 1; i <= n; i++) {
    if ((long long)p[i].r - (long long)x < (long long)p[i].l) {
      q[i].l = 0;
      q[i].r = 0;
      continue;
    }
    q[i].l = p[i].l, q[i].r = p[i].r - x;
    hx[++hx[0]] = q[i].l, hx[++hx[0]] = q[i].r;
  }
  sort(hx + 1, hx + 1 + hx[0]);
  hy[++hy[0]] = hx[1];
  for (int i = 2; i <= hx[0]; i++)
    if (hx[i] != hx[i - 1]) hy[++hy[0]] = hx[i];
  for (int i = 1; i <= n; i++) {
    if (!q[i].l && !q[i].r) continue;
    q[i].l = findf(q[i].l);
    q[i].r = findf(q[i].r);
    sum[q[i].l] += 1;
    sum[q[i].r + 1] -= 1;
  }
  int now = 0;
  for (int i = 1; i <= hy[0]; i++) {
    now += sum[i];
    if (now >= m) return true;
  }
  return false;
}
void deal(int x) {
  check(x);
  int tmp, now = 0;
  for (tmp = 1; tmp <= hy[0]; tmp++) {
    now += sum[tmp];
    if (now >= m) break;
  }
  for (int i = 1, j = 1; i <= n && j <= m; i++) {
    if (!q[i].l && !q[i].r) continue;
    if (q[i].r >= tmp && q[i].l <= tmp) {
      printf("%d ", i);
      j++;
    }
  }
}
void solve() {
  int l = 1, r = 2000000000, ans = 0;
  if (!check(0)) {
    printf("0\n");
    for (int i = 1; i <= m; i++) printf("%d ", i);
    return;
  }
  while (l <= r) {
    int mid = ((long long)l + (long long)r) / 2;
    if (check(mid)) {
      ans = mid;
      l = mid + 1;
    } else
      r = mid - 1;
  }
  printf("%d\n", ans + 1);
  deal(ans);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    int aa, bb;
    scanf("%d%d", &aa, &bb);
    p[i].l = aa;
    p[i].r = bb;
  }
  solve();
  return 0;
}
