//法一
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int cmp(const void *a,const void *b)
{
int *c=(int *)a;
int *d=(int *)b;
if(*(c+1)!=*(d+1))
return *(c+1)-*(d+1);
else return *c-*d;
}
int main()
{
int s;
int (*a)[2];
scanf("%d",&s);
while(s--)
{
int n,i,j,t,m;
scanf("%d",&n);
a=(int (*)[2])malloc(n*2*sizeof(int));//使用动态二维数组
for(i=0;i<n;i++)
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
qsort(a,n,sizeof(a[0]),cmp);
t=a[0][1];
for(m=1,i=1;i<n;i++)
if(a[i][0]>t)
{
t=a[i][1];
m++;
}
printf("%d\n",m);
}
free(a);
return 0;
}
//法二
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
int *c=(int *)a;
int *d=(int *)b;
if(*(c+1)!=*(d+1))
return *(c+1)-*(d+1);
}
int main()
{
int s;
int a[10000][2];
scanf("%d",&s);
while(s--)
{
int n,i,j,t,m;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
qsort(a,n,sizeof(a[0]),cmp);
t=a[0][1];
for(m=1,i=1;i<n;i++)
if(a[i][0]>t)
{
t=a[i][1];
m++;
}
printf("%d\n",m);
}
return 0;
}