#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template<class T> bool smin(T &a, const T b) { return b < a ? a = b, 1 : 0;}
template<class T> bool smax(T &a, const T b) { return a < b ? a = b, 1 : 0;}
void solve() {
int n, q;
cin >> n >> q;
vector<array<int, 2>> a(n);
for (auto &i : a) cin >> i[1] >> i[0];
// solve
sort(a.rbegin(), a.rend());
int ptr = 0;
multiset<int> s;
ll mx = 0, cur = 0;
vector<ll> pref(n+1);
for (int k = n; k >= 0; k--) {
while (ptr < n && a[ptr][0] >= k) {
cur += a[ptr][1];
s.insert(a[ptr][1]);
ptr++;
}
while (s.size() > k + 1) {
cur -= *s.begin();
s.erase(s.begin());
}
smax(mx, cur);
pref[k] = (s.size() <= k) ? cur : cur - *s.begin();
}
for (int k = 1; k <= n; k++) smax(pref[k], pref[k-1]);
// queries
while (q--) {
int x, y;
cin >> x >> y;
cout << max(mx, pref[y] + x) << '\n';
}
}
signed main() {
int t = 1;
cin >> t;
while (t--) solve();
}