#include <bits/stdc++.h>
using namespace std;
bool cmp(vector<int> v1, vector<int> v2) {
  if (v1[0] == v2[0]) {
    if (v1[2] == v2[2]) {
      if (v1[2] == -1)
        return v1[1] < v2[1];
      else
        return v2[1] < v1[1];
    }
    if (v1[2] == 1) {
      return true;
    } else {
      return false;
    }
  }
  return v1[0] < v2[0];
}
int main(int argc, const char* argv[]) {
  int n;
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (int i = 0; i < n; i++) {
    int a;
    cin >> a;
    vector<vector<int>> v;
    vector<vector<int>> vv;
    for (int j = 0; j < a; j++) {
      int b, c;
      cin >> b >> c;
      v.push_back({b, c, 1, j});
      v.push_back({c, b, -1, j});
      vv.push_back({b, c});
    }
    sort(v.begin(), v.end(), cmp);
    multiset<int> st;
    map<int, set<int>> m1;
    bool inter = false;
    bool end = false;
    for (int j = 0; j < v.size(); j++) {
      if (st.size() == 0) end = false;
      if (v[j][2] < 0) {
        st.erase(v[j][3]);
        if (st.size() == 1) end = true;
      } else {
        if (st.size() > 0) inter = true;
        if (st.size() == 1 && end) {
          if (m1.find(*st.begin()) == m1.end()) {
            m1[*st.begin()] = {};
          }
          m1[*st.begin()].insert(v[j][3]);
        }
        st.insert(v[j][3]);
      }
    }
    int mx = 0;
    int idx = -1;
    for (int j = 0; j < v.size(); j++) {
      if (m1[j].size() > mx) {
        mx = m1[j].size();
        idx = j;
      }
    }
    if (idx == -1) {
      if (!inter) vv.erase(vv.begin());
    } else {
      vv.erase(vv.begin() + idx);
    }
    sort(vv.begin(), vv.end());
    int cnt = 0;
    int r = -1000000009;
    for (int j = 0; j < vv.size(); j++) {
      if (vv[j][0] > r) {
        cnt++;
      }
      r = max(r, vv[j][1]);
    }
    cout << cnt << endl;
  }
  return 0;
}
