#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000000 + 100;
const int INF = 2e9 + 100;
int l[maxn], r[maxn];
struct Point {
  int x, id, ty;
  bool operator<(const Point& b) const { return x < b.x; }
} q[maxn];
struct Node {
  Node* ch[2];
  int r;
  int v;
  int s;
  Node(int vv) : v(vv) {
    s = 1;
    ch[0] = ch[1] = NULL;
    r = rand();
  }
  int cmp(int x) const {
    if (x == v) return -1;
    return x < v ? 0 : 1;
  }
  void maintain() {
    s = 1;
    if (ch[0] != NULL) s += ch[0]->s;
    if (ch[1] != NULL) s += ch[1]->s;
  }
};
void rotate(Node*& o, int d) {
  Node* k = o->ch[d ^ 1];
  o->ch[d ^ 1] = k->ch[d];
  k->ch[d] = o;
  o->maintain();
  k->maintain();
  o = k;
}
void insert(Node*& o, int x) {
  if (o == NULL)
    o = new Node(x);
  else {
    int d = x < o->v ? 0 : 1;
    insert(o->ch[d], x);
    if (o->ch[d]->r > o->r) rotate(o, d ^ 1);
  }
  o->maintain();
}
void remove(Node*& o, int x) {
  int d = o->cmp(x);
  Node* u = o;
  if (d == -1) {
    if (o->ch[0] != NULL && o->ch[1] != NULL) {
      int d2 = o->ch[0]->r > o->ch[1]->r ? 1 : 0;
      rotate(o, d2);
      remove(o->ch[d2], x);
    } else {
      if (o->ch[0] == NULL)
        o = o->ch[1];
      else
        o = o->ch[0];
      delete u;
    }
  } else
    remove(o->ch[d], x);
  if (o != NULL) o->maintain();
}
int kth(Node* o, int k) {
  if (o == NULL || k > o->s || k <= 0) return 0;
  int s = o->ch[1] == NULL ? 0 : o->ch[1]->s;
  if (k == s + 1)
    return o->v;
  else if (k <= s)
    return kth(o->ch[1], k);
  else
    return kth(o->ch[0], k - s - 1);
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  int tot = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &l[i], &r[i]);
    l[i] = l[i] * 2;
    r[i] = r[i] * 2 + 1;
    q[tot].x = l[i];
    q[tot].id = i;
    q[tot].ty = 1;
    tot++;
    q[tot].x = r[i];
    q[tot].id = i;
    q[tot].ty = -1;
    tot++;
  }
  sort(q, q + tot);
  Node* root = NULL;
  int x = -INF, y = -INF, cnt = 0;
  for (int i = 0; i < tot; i++) {
    if (q[i].ty == -1)
      remove(root, q[i].x), cnt--;
    else {
      insert(root, r[q[i].id]);
      cnt++;
      if (cnt >= k) {
        int ny = kth(root, k);
        if ((long long)ny - q[i].x > (long long)y - x) {
          y = ny;
          x = q[i].x;
        }
      }
    }
  }
  if (x != -INF) {
    printf("%d\n", ((long long)y - x + 1ll) / 2);
    cnt = 0;
    for (int i = 1; i <= n; i++)
      if (l[i] <= x && y <= r[i] && cnt < k) {
        printf("%d ", i);
        cnt++;
      }
    printf("\n");
  } else {
    printf("0\n");
    for (int i = 1; i <= k; i++) printf("%d ", i);
    printf("\n");
  }
  return 0;
}
