#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const int M = 205;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
struct node {
  int l, r, id;
} p[N << 1];
bool cmp(node a, node b) { return a.r < b.r; }
int sum[N << 4];
void update(int p, int L, int R, int pos) {
  if (L == R) {
    sum[pos]++;
    return;
  }
  int mid = (L + R) >> 1;
  if (p <= mid)
    update(p, L, mid, pos << 1);
  else
    update(p, mid + 1, R, pos << 1 | 1);
  sum[pos] = sum[pos << 1] + sum[pos << 1 | 1];
}
int query(int k, int L, int R, int pos) {
  if (L == R) return L;
  int mid = (L + R) >> 1;
  if (k <= sum[pos << 1])
    return query(k, L, mid, pos << 1);
  else
    return query(k - sum[pos << 1], mid + 1, R, pos << 1 | 1);
}
int n, k, x[N << 1];
vector<int> Ans;
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++)
    scanf("%d%d", &p[i].l, &p[i].r), p[i].id = i + 1, x[i * 2] = p[i].l,
                                     x[i * 2 + 1] = p[i].r;
  sort(p, p + n, cmp);
  sort(x, x + 2 * n);
  int m = unique(x, x + 2 * n) - x;
  for (int i = 0; i < n; i++) {
    p[i].l = lower_bound(x, x + m, p[i].l) - x;
    p[i].r = lower_bound(x, x + m, p[i].r) - x;
  }
  int ans = 0, st, ed;
  for (int i = n - 1; i >= 0; i--) {
    update(p[i].l, 0, m - 1, 1);
    if (sum[1] < k) continue;
    int pos = query(k, 0, m - 1, 1);
    int len = x[p[i].r] - x[pos] + 1;
    if (len > ans) ans = len, st = pos, ed = p[i].r;
  }
  if (!ans) {
    puts("0");
    for (int i = 1; i <= k; i++) printf("%d ", i);
  } else {
    printf("%d\n", ans);
    for (int i = 0; i < n; i++)
      if (p[i].l <= st && ed <= p[i].r) Ans.push_back(p[i].id);
    sort(Ans.begin(), Ans.end());
    for (int i = 0; i < k; i++) printf("%d ", Ans[i]);
  }
  return 0;
}
