#include <bits/stdc++.h>
using namespace std;
const long long N = 1 << 19;
struct range {
  long long l, r, idx;
  bool operator<(const range &a) const {
    return ((l == a.l) ? r > a.r : l < a.l);
  }
};
template <class T>
struct fenwick_tree {
  vector<T> a;
  long long n;
  void initialize(long long k) {
    n = k;
    a.assign(n + 1, 0);
  }
  void update(long long pos, T val) {
    for (; pos <= n; pos += pos & (-pos)) {
      a[pos] += val;
    }
  }
  T query(long long pos) {
    T ans = 0;
    for (; pos >= 1; pos -= pos & (-pos)) {
      ans += a[pos];
    }
    return ans;
  }
  T query(long long l, long long r) { return query(r) - query(l - 1); }
};
template <class T>
struct coordinate_compression {
  vector<T> v;
  vector<T> restore;
  map<T, long long> code;
  void clear() {
    v.clear();
    restore.clear();
    code.clear();
  }
  void insert(T value) { v.push_back(value); }
  long long run() {
    if (v.empty()) {
      return 0;
    }
    restore.clear();
    code.clear();
    long long i, ans;
    sort(v.begin(), v.end());
    code[v[0]] = 1;
    for (i = 1; i < (long long)(v.size()); i++) {
      if (v[i] != v[i - 1]) {
        code[v[i]] = code[v[i - 1]] + 1;
      }
    }
    ans = code[v.back()];
    restore.resize(ans);
    for (i = 0; i < (long long)(v.size()); i++) {
      restore[code[v[i]] - 1] = v[i];
    }
    return ans;
  }
  long long get_code(T n) { return code[n]; }
  T get_value(long long n) { return restore[n - 1]; }
};
long long tests, current_case;
long long n, k;
range a[N];
long long l[N], r[N];
long long aljghakjg, ahgkjahgkaj, middle;
fenwick_tree<long long> it;
coordinate_compression<long long> cc;
long long all;
void message(long long current_case) {
  fprintf(stderr, "Case %lld solved!\n", current_case);
}
bool check(long long length) {
  long long i, from, to, cnt;
  map<long long, long long>::iterator itl, itr;
  it.initialize(all);
  for (i = 1; i <= n; i++) {
    it.update(r[i], 1);
    from = a[i].l;
    to = a[i].l + length - 1;
    itr = cc.code.lower_bound(to);
    if (itr == cc.code.end()) continue;
    cnt = it.query(itr->second, all);
    if (cnt >= k) return true;
  }
  return false;
}
void restore(long long length) {
  long long i, from, to, cnt;
  map<long long, long long>::iterator itl, itr;
  if (length == 0) {
    for (i = 1; i <= k; i++) {
      if (i > 1) printf(" ");
      printf("%lld", i);
    }
    printf("\n");
    return;
  }
  vector<long long> ans;
  it.initialize(all);
  for (i = 1; i <= n; i++) {
    it.update(r[i], 1);
    from = a[i].l;
    to = a[i].l + length - 1;
    itr = cc.code.lower_bound(to);
    if (itr == cc.code.end()) continue;
    cnt = it.query(itr->second, all);
    if (cnt >= k) break;
  }
  for (i = 1; i <= n && (long long)(ans.size()) < k; i++) {
    if (a[i].l <= from && a[i].r >= to) {
      ans.push_back(a[i].idx);
    }
  }
  sort(ans.begin(), ans.end());
  for (i = 0; i < (long long)(ans.size()); i++) {
    if (i > 0) printf(" ");
    printf("%lld", ans[i]);
  }
  printf("\n");
}
int main() {
  long long i;
  tests = 1;
  for (current_case = 1; current_case <= tests; current_case++) {
    scanf("%lld %lld", &n, &k);
    for (i = 1; i <= n; i++) {
      scanf("%lld %lld", &a[i].l, &a[i].r);
      a[i].idx = i;
    }
    sort(a + 1, a + 1 + n);
    cc.clear();
    for (i = 1; i <= n; i++) {
      cc.insert(a[i].l);
      cc.insert(a[i].r);
    }
    all = cc.run();
    for (i = 1; i <= n; i++) {
      l[i] = cc.get_code(a[i].l);
      r[i] = cc.get_code(a[i].r);
    }
    aljghakjg = 0;
    ahgkjahgkaj = 2000000007;
    while (ahgkjahgkaj - aljghakjg > 1) {
      middle = (aljghakjg + ahgkjahgkaj) >> 1;
      if (check(middle)) {
        aljghakjg = middle;
      } else {
        ahgkjahgkaj = middle;
      }
    }
    printf("%lld\n", aljghakjg);
    restore(aljghakjg);
  MESSAGE:
    message(current_case);
  }
  return 0;
}
