#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const int N = 300010;
int n, m, ans, ansx, ansy, s1, s2, max1;
struct aa {
  int x, y, w;
} a[N], b[N << 1];
multiset<int> q1, q2;
void Init(int &x) {
  char y;
  while ((y = getchar()) < '0' || y > '9')
    ;
  x = y - '0';
  while ((y = getchar()) >= '0' && y <= '9') x = (x << 3) + (x << 1) + y - '0';
}
bool cmp(aa x, aa y) { return x.x < y.x || x.x == y.x && x.y < y.y; }
int main() {
  scanf("%d%d", &n, &m);
  memset(a, 0, sizeof(a));
  for (int i = 1; i <= n; ++i) scanf("%d%d", &a[i].x, &a[i].y);
  for (int i = 1; i <= n; ++i)
    b[(i << 1) - 1].x = a[i].x, b[(i << 1) - 1].y = 0, b[i << 1].x = a[i].y,
                 b[i << 1].y = 1, b[i << 1].w = i;
  n <<= 1;
  sort(b + 1, b + n + 1, cmp);
  ans = 0;
  ansx = 0;
  ansy = 0;
  s1 = 0;
  s2 = 0;
  q1.clear();
  q2.clear();
  for (int i = 1; i <= n; ++i)
    if (b[i].y) {
      if (s1 == m && b[i].x - max1 + 1 > ans) {
        ansx = max1;
        ansy = b[i].x;
        ans = ansy - ansx + 1;
      }
      if (a[b[i].w].x > max1)
        q2.erase(q2.find(a[b[i].w].x)), --s2;
      else {
        q1.erase(q1.find(a[b[i].w].x));
        --s1;
        if (s2)
          q1.insert(max1 = *q2.begin()), q2.erase(q2.begin()), ++s1, --s2;
        else if (s1)
          max1 = *q1.rbegin();
      }
    } else {
      if (s1 < m)
        q1.insert(b[i].x), ++s1, max1 = b[i].x;
      else
        q2.insert(b[i].x), ++s2;
    }
  printf("%d\n", ans);
  bool flag = 0;
  if (ans == 0) {
    for (int i = 1; i < m; ++i) printf("%d ", i);
    printf("%d\n", m);
    return 0;
  }
  for (int i = 1; i <= n && m; ++i)
    if (a[i].x <= ansx && a[i].y >= ansy) {
      if (flag)
        putchar(' ');
      else
        flag = 1;
      printf("%d", i);
      --m;
    }
  putchar('\n');
  return 0;
}
