#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300011;
int n, k, ans, dui[MAXN];
struct node {
  int pos, id;
  inline bool operator<(const node &a) const { return a.pos < pos; }
} tmp;
priority_queue<node> Q;
struct seq {
  int l, r, id;
} a[MAXN];
inline bool cmp(seq q, seq qq) { return q.l < qq.l; }
inline int getint() {
  int w = 0, q = 0;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 1, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? -w : w;
}
inline void work() {
  n = getint();
  k = getint();
  for (int i = 1; i <= n; i++)
    a[i].l = getint(), a[i].r = getint(), a[i].id = i;
  sort(a + 1, a + n + 1, cmp);
  ans = -1;
  for (int i = 1; i <= n; i++) {
    if (!Q.empty()) tmp = Q.top();
    if ((int)Q.size() < k) {
      tmp.pos = a[i].r;
      tmp.id = i;
      Q.push(tmp);
    } else {
      if (a[i].r > tmp.pos) {
        Q.pop();
        tmp.pos = a[i].r;
        tmp.id = i;
        Q.push(tmp);
      }
    }
    if ((int)Q.size() >= k) ans = max(Q.top().pos - a[i].l, ans);
  }
  printf("%d\n", ans + 1);
  if (ans == -1) {
    for (int i = 1; i <= k; i++) printf("%d ", i);
    return;
  }
  int lans = ans;
  ans = -1;
  while (!Q.empty()) Q.pop();
  for (int i = 1; i <= n; i++) {
    if (!Q.empty()) tmp = Q.top();
    if ((int)Q.size() < k) {
      tmp.pos = a[i].r;
      tmp.id = a[i].id;
      Q.push(tmp);
    } else {
      if (a[i].r > tmp.pos) {
        Q.pop();
        tmp.pos = a[i].r;
        tmp.id = a[i].id;
        Q.push(tmp);
      }
    }
    if ((int)Q.size() >= k) {
      ans = max(Q.top().pos - a[i].l, ans);
      if (ans == lans) {
        int cnt = 0;
        while (!Q.empty()) {
          tmp = Q.top();
          dui[++cnt] = tmp.id;
          Q.pop();
        }
        sort(dui + 1, dui + k + 1);
        for (int i = 1; i <= k; i++) printf("%d ", dui[i]);
        return;
      }
    }
  }
}
int main() {
  work();
  return 0;
}
