#include <iostream>
#include <algorithm>
#include <vector>
#define forn(i,n) for(int i=0;i<(int)n;++i)
#define ALL(v) v.begin(),v.end()
#define SZ(v) (int)v.size()
using namespace std;
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace __gnu_pbds;
template<typename T>
using indexed_set = tree<T, null_type, greater<T>, rb_tree_tag, tree_order_statistics_node_update>;
void solve(){
int n, k;
cin>>n>>k;
vector<pair<int,int>> rs(n);
for(auto &x: rs) cin>>x.first>>x.second;
sort(ALL(rs));
int ans = 0;
indexed_set<pair<int,int>> as; // activados
forn(i,n){
auto x = rs[i];
as.insert({x.second,i});
if(SZ(as) < k) continue;
int t = (*as.find_by_order(k-1)).first;
ans = max(ans, t-x.first);
}
cout<<ans<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL
freopen("B.in", "r", stdin);
int tcs; cin>>tcs;
while(tcs--)
#endif
solve();
return 0;
}