#include <bits/stdc++.h>
using namespace std;
const long long INF = LLONG_MAX / 100LL;
long long tree[600005], MaxVal;
map<long long, long long> h, revh;
void update(long long x, long long val) {
  while (x <= MaxVal) {
    tree[x] += val;
    x += (x & -x);
  }
}
long long read(long long x) {
  long long sum = 0;
  while (x > 0) {
    sum += tree[x];
    x -= (x & -x);
  }
  return sum;
}
int main() {
  long long n, k;
  cin >> n >> k;
  multiset<pair<long long, long long>> idx;
  vector<pair<long long, long long>> p(n + 1);
  set<long long> st;
  for (long long i = (long long)(1); i <= (long long)(n); i++) {
    long long x, y;
    cin >> x >> y;
    p[i] = {x, y};
    idx.insert({x, -INF});
    idx.insert({y, x});
    st.insert(x);
    st.insert(y);
  }
  for (long long x : st) {
    h[x] = ++MaxVal;
    revh[MaxVal] = x;
  }
  long long ans = 0, l = 0, r = -1;
  while (!idx.empty()) {
    auto top = *idx.begin();
    idx.erase(idx.begin());
    long long pt = top.first;
    long long act = top.second;
    if (act == -INF)
      update(h[pt], +1);
    else {
      long long start = h[act], end = h[pt];
      while (start <= end) {
        long long mid = (start + end) / 2;
        if (read(mid) >= k)
          end = mid - 1;
        else
          start = mid + 1;
      }
      if (read(start) >= k && ans < pt - revh[start] + 1) {
        l = revh[start], r = pt;
        ans = r - l + 1;
      }
      update(h[act], -1);
    }
  }
  cout << ans << '\n';
  if (ans == 0) {
    for (long long i = (long long)(1); i <= (long long)(k); i++)
      cout << i << ' ';
    return 0;
  }
  for (long long id = (long long)(1); id <= (long long)(n); id++) {
    if (k == 0) break;
    if (p[id].first <= l && p[id].second >= r) {
      cout << id << ' ';
      k--;
    }
  }
}
