#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
struct edge{
int u,v;
double w;
inline bool operator<(const edge &o)const{return w<o.w;}
};
vector<edge> e,e1;
int s,p,fa[510];
double x[510],y[510];
bool vis[510];
inline double dis(int i,int j){
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
inline int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
inline void merge(int a,int b){
a=find(a),b=find(b);
if(a!=b)fa[b]=a;
}
int main(){
scanf("%d%d",&s,&p);
for(int i=1;i<=p;i++)fa[i]=i;
for(int i=1;i<=p;i++)scanf("%lf%lf",&x[i],&y[i]);
for(int i=1;i<=p;i++)
for(int j=i+1;j<=p;j++)
e.push_back((edge){i,j,dis(i,j)});
sort(e.begin(),e.end());
for(int i=0;i<e.size();i++){
if(find(e[i].u)!=find(e[i].v)){
merge(e[i].u,e[i].v);
e1.push_back(e[i]);
}
if(e1.size()==p-1)break;
}
for(int i=e1.size()-1;i>=0;i--){
if(!vis[e1[i].u]){
vis[e1[i].u]=true;
s--;
if(!s){
printf("%.2lf",e[i].w);
return 0;
}
}
if(!vis[e1[i].v]){
vis[e1[i].v]=true;
s--;
if(!s){
printf("%.2lf",e[i-1].w);
return 0;
}
}
}
return 0;
}