#include <bits/stdc++.h>
using namespace std;
long long int tree[12 * 100005];
struct st {
  long long int l, r, id;
};
bool cmp(st x, st y) {
  if (x.l == y.l) {
    if (x.r == y.r) return x.id < y.id;
    return x.r < y.r;
  }
  return x.l < y.l;
}
st Ranges[100005 * 3];
long long int query(long long int node, long long int l, long long int r,
                    long long int b, long long int e) {
  if (e < l || b > r) return 0;
  if (l >= b && r <= e) {
    return tree[node];
  }
  long long int mid = (l + r) >> 1;
  long long int p1 = query(node * 2, l, mid, b, e);
  long long int p2 = query(node * 2 + 1, mid + 1, r, b, e);
  return p1 + p2;
}
void update(long long int node, long long int l, long long int r,
            long long int i) {
  if (i < l || i > r) return;
  if (l >= i && r <= i) {
    tree[node]++;
    return;
  }
  long long int mid = (l + r) >> 1;
  update(node * 2, l, mid, i);
  update(node * 2 + 1, mid + 1, r, i);
  tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
vector<long long int> store;
set<long long int> s;
long long int dis[100005 * 3];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long int n, k, i, mxr, mxl, ans = -1;
  cin >> n >> k;
  for (i = 0; i < n; i++) {
    cin >> Ranges[i].l >> Ranges[i].r;
    Ranges[i].id = i;
    s.insert(Ranges[i].r);
  }
  sort(Ranges, Ranges + n, cmp);
  for (auto it : s) {
    store.push_back(it);
  }
  s.clear();
  long long int newlen = store.size();
  for (i = 0; i < n; i++) {
    dis[i] = distance(store.begin(),
                      lower_bound(store.begin(), store.end(), Ranges[i].r));
  }
  for (i = 0; i < n; i++) {
    update(1, 0, newlen - 1, dis[i]);
    long long int low = 0;
    long long int high = newlen - 1, mid, validity = low;
    while (low <= high) {
      mid = (low + high) >> 1;
      long long int now = query(1, 0, newlen - 1, mid, newlen - 1);
      if (now == k) {
        validity = mid;
      }
      if (now > k || now == k)
        low = mid + 1;
      else if (now < k)
        high = mid - 1;
    }
    low = validity;
    if (query(1, 0, newlen - 1, low, newlen - 1) >= k) {
      long long int cur = store[low] - Ranges[i].l + 1;
      if (cur > ans) {
        ans = store[low] - Ranges[i].l + 1;
        mxl = Ranges[i].l;
        mxr = store[low];
      }
    }
  }
  if (ans == -1) {
    cout << 0 << endl;
    for (i = 0; i < k; i++) {
      printf("%I64d ", i + 1);
    }
    return 0;
  }
  cout << ans << endl;
  long long int cnt = 0;
  for (i = 0; i < n; i++) {
    if (Ranges[i].l <= mxl && Ranges[i].r >= mxr && cnt < k) {
      printf("%I64d ", Ranges[i].id + 1);
      cnt++;
    }
  }
  return 0;
}
