#include <bits/stdc++.h>
using namespace std;
long long n, k;
long long X[300005];
long long Y[300005];
long long ans[300005];
vector<pair<long long, long long> > v;
int ok(long long len) {
  v.clear();
  for (int i = 0; i < n; i++) {
    if (Y[i] - X[i] + 1 >= len) {
      v.push_back(make_pair(X[i], 1));
      v.push_back(make_pair(Y[i] - len + 2, -1));
    }
  }
  if (v.size() == 0) return 0;
  sort(v.begin(), v.end());
  int i = 0, atual = 0;
  while (i < v.size()) {
    long long vez = v[i].first;
    while (i < v.size() and vez == v[i].first) {
      atual += v[i].second;
      i++;
    }
    if (atual >= k) {
      return 1;
    }
  }
  return 0;
}
vector<pair<pair<long long, long long>, int> > v2;
int imprimir(long long len) {
  if (len == 0) {
    for (int i = 1; i <= k; i++) printf("%d ", i);
    return 0;
  }
  v2.clear();
  for (int i = 0; i < n; i++) {
    if (Y[i] - X[i] + 1 >= len) {
      v2.push_back(make_pair(make_pair(X[i], 1), i + 1));
      v2.push_back(make_pair(make_pair(Y[i] - len + 2, -1), i + 1));
    }
  }
  if (v2.size() == 0) return 0;
  sort(v2.begin(), v2.end());
  int i = 0, atual = 0;
  set<int> res;
  while (i < v2.size()) {
    long long vez = v2[i].first.first;
    while (i < v2.size() and vez == v2[i].first.first) {
      atual += v2[i].first.second;
      if (v2[i].first.second == 1)
        res.insert(v2[i].second);
      else
        res.erase(v2[i].second);
      i++;
    }
    if (atual >= k) {
      atual = k;
      while (atual) {
        atual--;
        printf("%d ", *res.begin());
        res.erase(*res.begin());
      }
    }
  }
  return 0;
}
int main() {
  scanf("%lld %lld", &n, &k);
  for (int i = 0; i < n; i++) {
    scanf("%lld %lld", &X[i], &Y[i]);
  }
  long long l = 0, r = 2000000005LL, m;
  while (l < r) {
    m = (l + r) / 2LL;
    if (ok(m)) {
      if (ok(m + 1))
        l = m + 1;
      else
        l = r = m;
    } else
      r = m - 1;
  }
  m = (l + r) / 2LL;
  printf("%lld\n", m);
  imprimir(m);
}
