#include<cstdio>
#include<set>
#include<iostream>
#define rson id<<1|1
#define lson id << 1
#include<algorithm>
using namespace std;
const int len = 100008;
int a[len*10],b[len * 5];
struct Node
{
int l,r;
}d[len];
struct Linetree
{
int l,r,op,Mark;
int mid()
{
return (l+ r) / 2;
}
}node[len * 10];
void _btree(int id,int l,int r)
{
node[id].l = l;node[id].r = r;node[id].op = 0;
if(l == r)return;
int mid = node[id].mid();
_btree(lson,l,mid);
_btree(rson,mid+1,r);
}
void pushdown(int id)
{
if(node[id].op)
{
node[rson].op = node[lson].op = node[id].op ;
node[id].op = 0;
}
}
void update(int id,int l,int r,int i)
{
if(node[id].l== l && node[id].r ==r)
{
node[id].op = i;
return;
}
pushdown(id);
int mid = node[id].mid();
if(r <= mid)update(lson,l,r,i);
else if(l > mid)update(rson,l,r,i);
else {
update(lson,l,mid,i);
update(rson,mid+1,r,i);
}
}
set <int> s;
set <int> :: iterator it;
void cout_num(int id)
{
if(node[id].l == node[id].r)
{
s.insert(node[id].op);return;
}
pushdown(id);
cout_num(lson);
cout_num(rson);
}
int main()
{
int n,m,l,r;
int T;
b[0] = -100;
scanf("%d",&T);
while(T--)
{
s.clear();
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&d[i].l,&d[i].r);
b[2*i-1] = d[i].l;b[2*i] = d[i].r;
}
sort(b+1,b+n*2+1);
int cn = 1;
for(int i=1;i<=n*2;i++)
{ <span style="font-family: Arial, Helvetica, sans-serif;">if(i > 1)<
if(b[i] - b[i-1] > 1 )a[cn++] = b[i-1]+1;
if(b[i] !=b[i-1])a[cn++] = b[i];
}
_btree(1,1,cn-1);
for(int i=1;i<=n;i++)
{
int x = lower_bound(a+1,a+cn,d[i].l) - a;
int y = lower_bound(a+1,a+cn,d[i].r) - a;
update(1,x,y,i);
// cout << "(x,y) is "<<x<<y<<endl;
}
cout_num(1);
it = s.begin();
//cout << s.size()<<endl;
if(*it == 0)
printf("%d\n",s.size()-1);
else printf("%d\n",s.size());
}
}