#include using namespace std; const int MaxN = (int)4e5 + 10; const int MOD = (int)1e9 + 7; const int INF = 1e9; int n, k; int fact[MaxN], rfact[MaxN], inv[MaxN]; pair < int, int > p[MaxN]; int fenw[MaxN]; long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } int comb(int n, int k) { if (n < k) { return 0; } return 1LL * fact[n] * rfact[k] % MOD * rfact[n - k] % MOD; } bool cmp(pair < int, int > a, pair < int, int > b) { return a.first < b.first || a.first == b.first && a.second > b.second; } int en; void solve() { n = readIntSp(1, 4e5); en += n; assert (en <= 4e5); k = readIntLn(1, n); for (int i = 1; i <= n; ++i) { p[i].first = readIntSp(1, 1e9); p[i].second = readIntLn(p[i].first, 1e9); } sort(p + 1, p + n + 1, cmp); multiset < int > f; int bad = 0; for (int i = 1; i <= n; ++i) { while (!f.empty() && *f.begin() < p[i].first) { f.erase(f.begin()); } bad = (bad + 1LL * comb(f.size(), k - 1)) % MOD; f.insert(p[i].second); } printf("%d\n", (comb(n, k) - bad + MOD) % MOD); } int main() { // freopen("input.txt", "r", stdin); fact[0] = rfact[0] = 1; for (int i = 1; i < MaxN; ++i) { inv[i] = i == 1 ? 1 : 1LL * (MOD - MOD / i) * inv[MOD % i] % MOD; fact[i] = 1LL * i * fact[i - 1] % MOD; rfact[i] = 1LL * inv[i] * rfact[i - 1] % MOD; } int t = readIntLn(1, 1e3); while (t --> 0) { solve(); } return 0; }