#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i, n) for (int i = 0; i < (int)(n); ++i) //#define cerr if(false) cerr #ifdef DEBUG #define show(...) cerr << #__VA_ARGS__ << " = ", debug(__VA_ARGS__); #else #define show(...) 42 #endif using namespace std; using ll = long long; using pii = pair; template ostream &operator<<(ostream &os, pair a) { os << '(' << a.first << ',' << a.second << ')'; return os; } template ostream &operator<<(ostream &os, vector v) { for (auto x : v) os << x << ' '; return os; } template ostream &operator<<(ostream &os, set v) { for (auto x : v) os << x << ' '; return os; } template ostream &operator<<(ostream &os, map mp) { for (auto x : mp) os << x << ' '; return os; } void debug() { cerr << '\n'; } template void debug(H a, T... b) { cerr << a; if (sizeof...(b)) cerr << ", "; debug(b...); } int main() { int n, k; cin >> n >> k; vector d(n); rep(i, n) cin >> d[i].first >> d[i].second; int l = 0; int r = 1e9 + 2; while (r - l > 1) { int mid = (l + r) / 2; ll cnt = 0; rep(i, n) { if (d[i].first > mid) continue; if (d[i].second >= mid) cnt += mid - d[i].first + 1; else cnt += d[i].second - d[i].first + 1; } if (cnt >= k) { r = mid; } else { l = mid; } } cout << r << endl; }