#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct edge{
int from,to;
double w;
};
edge e1[1000005];
edge e2[5005];
int node[1005][2];
int fa[1005],fa1[1005];
int n,k;
int cnt,cnt1;
double dis(int u,int v)
{
return (double)(sqrt(((double)node[u][0]-node[v][0])*(node[u][0]-node[v][0])+(double)(node[u][1]-node[v][1])*(node[u][1]-node[v][1])));
}
int cmp(edge e,edge e3)
{
return e.w<e3.w;
}
int find(int x)
{
if(fa[x]!=x)
{
fa[x]=find(fa[x]);
}
return fa[x];
}
void add(int u,int v,int w)
{
e2[++cnt1].from=u;
e2[cnt1].to=v;
e2[cnt1].w=w;
}
void kruaskl();
int main()
{
cin>>n>>k;
int u,v;
for(int i=1;i<=n;i++)
{
cin>>node[i][0]>>node[i][1];
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
e1[++cnt].from=i;
e1[cnt].to=j;
e1[cnt].w=dis(i,j);
}
}
kruaskl();
printf("%.2lf",e2[n-k+1].w);
}
void kruaskl()
{
for(int i=1;i<=n;i++)
{
fa[i]=i;
}
sort(e1+1,e1+1+cnt,cmp);
for(int i=1;i<=cnt;i++)
{
int u=e1[i].from,v=e1[i].to;
int uu=find(u);
int vv=find(v);
if(uu!=vv)
{
add(u,v,e1[i].w);
fa[uu]=vv;
}
}
}