#include <bits/stdc++.h>
#include <unordered_set>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
typedef pair<ll, ll> pll;
int S, P;
int pa[501];
vector<pii> v;
int find(int n) {
if (pa[n] < 0) return n;
return pa[n] = find(pa[n]);
}
void merge(int a, int b) {
a = find(a);
b = find(b);
if (a == b) return;
pa[a] = b;
}
double dist(int i, int j) {
ll d1 = v[i].first - v[j].first;
ll d2 = v[i].second - v[j].second;
return sqrt(d1 * d1 + d2 * d2);
}
bool chk(double d) {
memset(pa, -1, sizeof(pa));
for (int i = 0; i < P; i++)
for (int j = i + 1; j < P; j++)
if (dist(i, j) <= d)
merge(i, j);
int cnt = 0;
for (int i = 0; i < P; i++)
if (pa[i] < 0) cnt++;
return cnt <= S;
}
int main() {
// ios::sync_with_stdio(false);
// cin.tie(0), cout.tie(0);
int N; cin >> N;
while (N--) {
cin >> S >> P;
v.clear(), v.resize(P);
for (int i = 0; i < P; i++)
cin >> v[i].first >> v[i].second;
double lo = 0, hi = 1e9, mid;
for (int i = 0; i < 100; i++){
mid = (lo + hi) / 2;
if (chk(mid)) hi = mid;
else lo = mid;
}
printf("%.2f", hi);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKCmludCBTLCBQOwppbnQgcGFbNTAxXTsKdmVjdG9yPHBpaT4gdjsKCmludCBmaW5kKGludCBuKSB7CglpZiAocGFbbl0gPCAwKSByZXR1cm4gbjsKCXJldHVybiBwYVtuXSA9IGZpbmQocGFbbl0pOwp9CnZvaWQgbWVyZ2UoaW50IGEsIGludCBiKSB7CglhID0gZmluZChhKTsKCWIgPSBmaW5kKGIpOwoJaWYgKGEgPT0gYikgcmV0dXJuOwoJcGFbYV0gPSBiOwp9CmRvdWJsZSBkaXN0KGludCBpLCBpbnQgaikgewoJbGwgZDEgPSB2W2ldLmZpcnN0IC0gdltqXS5maXJzdDsKCWxsIGQyID0gdltpXS5zZWNvbmQgLSB2W2pdLnNlY29uZDsKCXJldHVybiBzcXJ0KGQxICogZDEgKyBkMiAqIGQyKTsKfQoKYm9vbCBjaGsoZG91YmxlIGQpIHsKCW1lbXNldChwYSwgLTEsIHNpemVvZihwYSkpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBQOyBpKyspCgkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgUDsgaisrKQoJCQlpZiAoZGlzdChpLCBqKSA8PSBkKQoJCQkJbWVyZ2UoaSwgaik7CglpbnQgY250ID0gMDsKCWZvciAoaW50IGkgPSAwOyBpIDwgUDsgaSsrKSAKCQlpZiAocGFbaV0gPCAwKSBjbnQrKzsKCXJldHVybiBjbnQgPD0gUzsKfQoKaW50IG1haW4oKSB7Ci8vCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKLy8JY2luLnRpZSgwKSwgY291dC50aWUoMCk7CglpbnQgTjsgY2luID4+IE47Cgl3aGlsZSAoTi0tKSB7CgkJY2luID4+IFMgPj4gUDsKCQl2LmNsZWFyKCksIHYucmVzaXplKFApOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgUDsgaSsrKSAKCQkJY2luID4+IHZbaV0uZmlyc3QgPj4gdltpXS5zZWNvbmQ7CgoJCWRvdWJsZSBsbyA9IDAsIGhpID0gMWU5LCBtaWQ7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKyl7CgkJCW1pZCA9IChsbyArIGhpKSAvIDI7CgkJCWlmIChjaGsobWlkKSkgaGkgPSBtaWQ7IAoJCQllbHNlIGxvID0gbWlkOwoJCX0KCQlwcmludGYoIiUuMmYiLCBoaSk7Cgl9CglyZXR1cm4gMDsKfQ==