#include<bits/stdc++.h>
#define MAXN 10000001
using namespace std;
struct node{
int x,y;
double dis;
}edge[MAXN],a[MAXN];
int n,k,m,fa[MAXN];
inline int get(const int &x){
if(fa[x]==x){
return x;
}
return fa[x]=get(fa[x]);
}
inline void merge(const int &x,const int &y){
fa[get(x)]=get(y);
}
inline void kruskal(){
for(int i=1;i<=m;++i){
if(get(edge[i].x)!=get(edge[i].y)){
--n;
merge(edge[i].x,edge[i].y);
if(n<=0){
printf("%.2lf",edge[i].dis);
return;
}
}
}
}
inline bool cmp(const node &x,const node &y){
return x.dis<y.dis;
}
inline double dist(const int &x,const int &y){
return sqrt((a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y));
}
int main(){
scanf("%d %d",&n,&k);
for(int i=1;i<=n;++i){
fa[i]=i;
}
for(int i=1;i<=n;++i){
scanf("%d %d",&a[i].x,&a[i].y);
}
for(int i=1;i<n;++i){
for(int j=1;j<i;++j){
edge[++m].x=i;
edge[m].y=j;
edge[m].dis=dist(i,j);
}
}
sort(edge+1,edge+1+m,cmp);
n-=k;
kruskal();
return 0;
}