#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
vector<pair<long long int, int>> G[MAXN];
pair<long long int, long long int> p[MAXN];
long long int L[MAXN];
int main() {
  int n, k;
  while (~scanf("%d%d", &n, &k)) {
    for (int i = 0; i < MAXN; i++) {
      G[i].clear();
    }
    for (int i = 0; i < n; i++) {
      scanf("%I64d%I64d", &p[i].first, &p[i].second);
      L[i] = p[i].first;
    }
    sort(L, L + n);
    int size = unique(L, L + n) - L;
    for (int i = 0; i < n; i++) {
      int idx = lower_bound(L, L + size, p[i].first) - L;
      G[idx].push_back(make_pair(p[i].second, i + 1));
    }
    long long int ans = 0;
    multiset<pair<long long int, int>> se;
    for (int i = 0; i < size; i++) {
      for (int j = 0; j < G[i].size(); j++) {
        se.insert(G[i][j]);
      }
      while ((int)se.size() > k) {
        se.erase(se.begin());
      }
      if ((int)se.size() == k && (se.begin()->first) >= L[i]) {
        ans = max(se.begin()->first - L[i] + 1, ans);
      }
    }
    printf("%I64d\n", ans);
    if (ans == 0) {
      for (int i = 1; i <= k; i++) {
        printf("%d ", i);
      }
    } else {
      se.clear();
      for (int i = 0; i < size; i++) {
        for (int j = 0; j < G[i].size(); j++) {
          se.insert(G[i][j]);
        }
        while ((int)se.size() > k) {
          se.erase(se.begin());
        }
        if ((int)se.size() == k && se.begin()->first >= L[i] &&
            (se.begin()->first - L[i] + 1) == ans) {
          for (multiset<pair<long long int, int>>::iterator it = se.begin();
               it != se.end(); it++) {
            printf("%d ", it->second);
          }
          break;
        }
      }
    }
    printf("\n");
  }
  return 0;
}
