RT,
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
long double x,y;
}p[21];
set<int>s[21][21];
set<int>::iterator it;
int f[1<<19];//0die 1life
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%Lf%Lf",&p[i].x,&p[i].y);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(p[i].x==p[j].x) continue;
long double a=(p[j].x*p[i].y-p[i].x*p[j].y)/(p[i].x*p[j].x*(p[i].x-p[j].x));
long double b=(p[i].y/p[i].x)-(a*p[i].x);
if(a>-1e-9) continue;
// if((p[j].y/p[j].x)-(a*p[j].x)!=b) continue;////////////删了这行就A了
for(int k=1;k<=n;k++)
if(fabs(a*p[k].x*p[k].x+b*p[k].x-p[k].y)<=1e-9) s[i][j].insert(k);
// printf("(%d %d):%.2Lf <%.2Lf %.2Lf> [%d]\n",i,j,a,b,(p[j].y-a*p[j].x*p[j].x)/p[j].x,s[i][j].size());
}
}
for(int S=1;S<(1<<n);S++) f[S]=n;
for(int S=0;S<(1<<n);S++)
for(int i=1;i<=n;i++){
if(((S>>(i-1))&1)) continue;
int nex=(S|(1<<(i-1)));
f[nex]=min(f[nex],f[S]+1);
for(int j=1;j<=n;j++){
if(j==i||s[i][j].size()==0) continue;
if(((S>>(j-1))&1)) continue;
nex=S;
for(it=s[i][j].begin();it!=s[i][j].end();++it){
nex|=(1<<((*it)-1));
}
// printf(" i:%d j:%d S:%d -> nex:%d %d+1\n",i,j,S,nex,f[S]);
f[nex]=min(f[nex],f[S]+1);
}
}
printf("%d\n",f[(1<<n)-1]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
s[i][j].clear();
}
}