#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vl = vector<ll>;
using vvl = vector<vl>;
using vb = vector<bool>;
using vs = vector<string>;
using pll = pair<ll, ll>;
const ll oo = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-9;
int main() {
  cin.sync_with_stdio(0);
  ll n, k;
  cin >> n >> k;
  vector<pll> segs(n);
  vector<pair<pll, ll>> ordering(n);
  for (ll i = (0); i < (n); i++) {
    cin >> segs[i].first >> segs[i].second;
    ordering[i].first.first = segs[i].first;
    ordering[i].first.second = segs[i].second;
    ordering[i].second = i;
  }
  sort(begin(segs), end(segs));
  sort(begin(ordering), end(ordering));
  ll cur_open = 0, last_open;
  ll cur_val = segs[0].first;
  multiset<ll> closings;
  ll max_res = 0;
  pll max_p = {oo, -oo};
  ll i = 0;
  while (i < n) {
    if (segs[i].first <= cur_val) {
      cur_open++;
      ({
        if (0) cerr << "TR: " << ("cur_open") << " = " << (cur_open) << endl;
      });
      last_open = segs[i].first;
      closings.insert(segs[i].second);
      if (cur_open > k) {
        ({
          if (0) cerr << "TR: " << ("1") << " = " << (1) << endl;
        });
        ({
          if (0) cerr << "TR: " << ("cur_open") << " = " << (cur_open) << endl;
        });
        cur_open--;
        closings.erase(closings.find(*closings.begin()));
      }
      if (cur_open == k) {
        ({
          if (0) cerr << "TR: " << ("2") << " = " << (2) << endl;
        });
        ({
          if (0) cerr << "TR: " << ("cur_open") << " = " << (cur_open) << endl;
        });
        ll res = *closings.begin() - last_open + 1;
        if (res > max_res) {
          max_res = res;
          max_p = {last_open, *closings.begin()};
        }
      }
      i++;
      continue;
    }
    if (ll((closings).size()) && *closings.begin() <= cur_val) {
      ({
        if (0)
          cerr << "TR: " << ("\"closing\"") << " = " << ("closing") << endl;
      });
      ({
        if (0) cerr << "TR: " << ("cur_open") << " = " << (cur_open) << endl;
      });
      cur_open--;
      closings.erase(closings.find(*closings.begin()));
      continue;
    }
    if (!ll((closings).size())) {
      cur_val = segs[i].first;
    } else {
      cur_val = min(segs[i].first, *closings.begin());
    }
  }
  cout << max_res << endl;
  ll cnt = 0;
  for (ll j = (0); j < (n); j++) {
    if (cnt >= k) break;
    if (segs[j].first <= max_p.first && segs[j].second >= max_p.second) {
      if (cnt) cout << " ";
      cout << ordering[j].second + 1;
      cnt++;
    }
  }
  ({
    if (0) cerr << "TR: " << ("max_p.xx") << " = " << (max_p.first) << endl;
  });
  ({
    if (0) cerr << "TR: " << ("max_p.yy") << " = " << (max_p.second) << endl;
  });
  cout << endl;
}
