#include <bits/stdc++.h>
using namespace std;
int allvv[414141], av = 0;
struct lr {
  int l, r;
} a[212121];
bool sort_l(lr a, lr b) {
  if (a.l != b.l) return a.l < b.l;
  return a.r < b.r;
}
struct T {
  int sum, lazy;
} tr[3131313];
void lazy(int w) {
  if (!tr[w].lazy) return;
  int c1 = w * 2, c2 = w * 2 + 1;
  tr[c1].lazy = 1;
  tr[c1].sum = 0;
  tr[c2].lazy = 1;
  tr[c2].sum = 0;
  tr[w].lazy = 0;
  tr[w].sum = 0;
}
void update(int w) { tr[w].sum = tr[w * 2].sum + tr[w * 2 + 1].sum; }
void insert_g(int w, int s, int e, int x) {
  if (s != e) lazy(w);
  if (s == e) {
    tr[w].sum++;
    return;
  }
  int m = (s + e) / 2;
  if (x <= m)
    insert_g(w * 2, s, m, x);
  else
    insert_g(w * 2 + 1, m + 1, e, x);
  update(w);
}
void makeZero(int w, int s, int e, int l, int r) {
  if (s != e) lazy(w);
  if (s == l && e == r) {
    tr[w].lazy = 1;
    tr[w].sum = 0;
    return;
  }
  int m = (s + e) / 2;
  if (l <= m) makeZero(w * 2, s, m, l, min(m, r));
  if (m < r) makeZero(w * 2 + 1, m + 1, e, max(l, m + 1), r);
  update(w);
}
int get_sum(int w, int s, int e, int l, int r) {
  if (s != e) lazy(w);
  if (s == l && e == r) return tr[w].sum;
  int res = 0;
  int m = (s + e) / 2;
  if (l <= m) res += get_sum(w * 2, s, m, l, min(m, r));
  if (m < r) res += get_sum(w * 2 + 1, m + 1, e, max(l, m + 1), r);
  update(w);
  return res;
}
int mx[212121], cnt[212121];
int main() {
  int t, tc;
  scanf("%d", &t);
  for (tc = 0; tc < t; tc++) {
    int n, i, j;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
      scanf("%d%d", &a[i].l, &a[i].r);
      allvv[av++] = a[i].l;
      allvv[av++] = a[i].r;
    }
    sort(a + 1, a + n + 1, sort_l);
    sort(allvv, allvv + av);
    av = unique(allvv, allvv + av) - allvv;
    for (i = 1; i <= n; i++) {
      a[i].l = lower_bound(allvv, allvv + av, a[i].l) - allvv;
      a[i].r = lower_bound(allvv, allvv + av, a[i].r) - allvv;
    }
    mx[0] = -1;
    for (i = 1; i <= n; i++) {
      if (a[i].l <= mx[i - 1]) {
        cnt[i] = cnt[i - 1];
        mx[i] = max(mx[i - 1], a[i].r);
      } else {
        cnt[i] = cnt[i - 1] + 1;
        mx[i] = a[i].r;
      }
    }
    int ans = 0;
    for (i = n; i >= 1; i--) {
      int x, y, z;
      x = cnt[i - 1];
      y = get_sum(1, 0, av, 0, av);
      z = (mx[i - 1] == -1 ? 0 : get_sum(1, 0, av, 0, mx[i - 1]));
      int v = x + y - z;
      ans = max(ans, v);
      makeZero(1, 0, av, a[i].l, a[i].r);
      insert_g(1, 0, av, a[i].l);
    }
    printf("%d\n", ans);
    int tn;
    for (tn = 1; tn <= av; tn *= 2)
      ;
    for (i = 0; i <= n; i++) mx[i] = cnt[i] = 0;
    for (i = 0; i <= tn * 2; i++) tr[i] = {0, 0};
  }
  return 0;
}
