#include<bits/stdc++.h>
using namespace std;
vector<int> xarr,yarr;
struct Node{
int u,v; // 点!
int dis;
Node(int _u,int _v,int _dis):u(_u),v(_v),dis(_dis){}
bool operator <(const Node& node){
return dis < node.dis;
}
} ;
int find(vector<int>& father,int u){
if(father[u] == u) return u;
return find(father,father[u]);
}
int distance(int u,int v){
int xx = xarr[u] - xarr[v];
int yy = yarr[u] - yarr[v];
return xx*xx + yy*yy;
}
int main(){
int n,k;
cin >> n >> k;
xarr.resize(n); yarr.resize(n);
for(int i = 0; i < n; i++){
cin >> xarr[i] >> yarr[i];
}
vector<Node> arr;
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
arr.emplace_back(Node(i,j,distance(i,j)));
}
}
sort(arr.begin(),arr.end());
if(k == 1){
cout << 0 << endl;
return 0;
}
vector<int> father(n);
for(int i = 0; i < n; i++) father[i] = i;
vector<int> size(n,1);
for(Node node : arr){
int f1 = find(father,node.u);
int f2 = find(father,node.v);
if(f1 != f2){
father[f1] = f2;
size[f2] += size[f1];
if(size[f2] >= k){
cout << node.dis << endl;
return 0;
}
}
}
assert(0);
return 0;
}