#include <bits/stdc++.h>
using namespace std;
mt19937 bruh(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rofl(chrono::steady_clock::now().time_since_epoch().count());
const int N = 3e6 + 200;
const int M = 3e6 + 200;
const int mod = 0;
const int inf = 2e9 + 3;
const long long INF = 1e18;
const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, -1, 1};
void files() {
  freopen(".in", "r", stdin);
  freopen(".out", "w", stdout);
}
int T, n, l[N], r[N], mx, add[N];
vector<int> e;
struct node {
  pair<int, int> t[M];
  pair<int, int> merge(pair<int, int> a, pair<int, int> b) {
    if (a.first == b.first)
      a.second += b.second;
    else
      a = min(a, b);
    return a;
  }
  void build(int v = 1, int tl = 1, int tr = mx) {
    if (tl == tr) {
      t[v] = {add[tl], 1};
      return;
    }
    int tm = tl + tr >> 1;
    build(v * 2, tl, tm);
    build(v * 2 + 1, tm + 1, tr);
    t[v] = merge(t[v * 2], t[v * 2 + 1]);
  }
  pair<int, int> get(int l, int r, int v = 1, int tl = 1, int tr = mx) {
    if (l <= tl && tr <= r) return t[v];
    if (tr < l || r < tl) return {inf, 0};
    int tm = tl + tr >> 1;
    return merge(get(l, r, v * 2, tl, tm), get(l, r, v * 2 + 1, tm + 1, tr));
  }
} t;
int main() {
  scanf("%d", &T);
  while (T--) {
    e.clear();
    mx = 1;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
      scanf("%d %d", &l[i], &r[i]);
      e.push_back(l[i]), e.push_back(r[i]);
    }
    sort(e.begin(), e.end());
    e.erase(unique(e.begin(), e.end()), e.end());
    for (int i = 1; i <= n; ++i) {
      l[i] = lower_bound(e.begin(), e.end(), l[i]) - e.begin() + 1;
      r[i] = lower_bound(e.begin(), e.end(), r[i]) - e.begin() + 1;
      l[i] = l[i] * 2 - 1;
      r[i] = r[i] * 2 - 1;
      mx = max(mx, r[i]);
    }
    int meme = 1;
    for (int i = 1; i <= mx; ++i) add[i] = 0;
    for (int i = 1; i <= n; ++i) add[l[i]]++, add[r[i] + 1]--;
    for (int i = 1; i <= mx; ++i) {
      add[i] += add[i - 1];
      meme += (add[i] == 0);
    }
    t.build();
    int ans = -1;
    int ret = 0;
    pair<int, int> lmao = t.get(1, mx);
    for (int i = 1; i <= n; ++i) {
      pair<int, int> cnt = t.get(l[i], r[i]);
      if (cnt.first == 1) {
        if (cnt.second == r[i] - l[i] + 1)
          ret = -1;
        else {
          if (add[l[i]] == 1) l[i] += 2;
          if (add[r[i]] == 1) r[i] -= 2;
          pair<int, int> cnt = t.get(l[i], r[i]);
          if (cnt.first == 1)
            ret = cnt.second;
          else
            ret = 0;
        }
      } else
        ret = 0;
      ans = max(ans, ret);
    }
    printf("%d\n", ans + meme);
  }
}
