#include <bits/stdc++.h>
using namespace std;
void kout() { cerr << endl; }
template <class T, class... U>
void kout(T a, U... b) {
  cerr << a << ' ', kout(b...);
}
template <class T>
void pary(T L, T R) {
  while (L != R) cerr << *L << " \n"[++L == R];
}
const long long MAXN = 200000;
const double INF = 2e4;
const double eps = 1e-9;
const double PI = 3.14159265358979323846264338327950288;
long long n, k;
vector<tuple<long long, long long>> pts;
class Bit {
 private:
  long long arr[MAXN * 2 + 1];
  inline long long lb(long long a) { return a & -a; }

 public:
  void build() {
    for (long long i = 1; i <= MAXN * 2; i++) arr[i] = 0;
  }
  void mdy(long long a) {
    for (long long i = a; i <= MAXN * 2; i += lb(i)) arr[i]++;
  }
  long long qry(long long a) {
    long long sum = 0;
    for (long long i = a; i; i -= lb(i)) sum += arr[i];
    return sum;
  }
} bit;
long long solve(double R) {
  vector<tuple<double, double>> pos;
  vector<tuple<long long, long long>> arr;
  vector<double> cpy;
  for (long long i = 0; i < n; i++) {
    auto [x, y] = pts[i];
    if (x * x + y * y <= R * R) continue;
    double l = atan2(y, x) - acos(R / hypot(x, y));
    double r = atan2(y, x) + acos(R / hypot(x, y));
    if (l < -PI) l += 2 * PI;
    if (r > PI) r -= 2 * PI;
    pos.emplace_back(l, r);
    cpy.emplace_back(l), cpy.emplace_back(r);
  }
  sort(cpy.begin(), cpy.end());
  long long len = cpy.size();
  bit.build();
  for (long long i = 0; i < pos.size(); i++) {
    auto [l, r] = pos[i];
    long long tL = (lower_bound(cpy.begin(), cpy.end(), l) - cpy.begin()) + 1;
    long long tR = (lower_bound(cpy.begin(), cpy.end(), r) - cpy.begin()) + 1;
    if (tR <= tL) bit.mdy(tR);
    arr.emplace_back(tL, tR);
  }
  sort(arr.begin(), arr.end());
  long long cnt = n * (n - 1) / 2;
  for (long long i = 0; i < arr.size(); i++) {
    auto [tL, tR] = arr[i];
    if (tR > tL) {
      cnt -= bit.qry(tR) - bit.qry(tL - 1);
      bit.mdy(tR);
    } else {
      cnt -= bit.qry(len + tR) - bit.qry(tL - 1);
      bit.mdy(len + tR);
    }
  }
  return cnt;
}
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  cin >> n >> k;
  pts.resize(n);
  for (long long i = 0; i < n; i++) {
    auto &[x, y] = pts[i];
    cin >> x >> y;
  }
  double l = 0, r = INF;
  for (long long i = 0; i < 35; i++) {
    double mid = (l + r) / 2;
    if (solve(mid) < k)
      l = mid;
    else
      r = mid;
  }
  cout << fixed << setprecision(9) << l << "\n";
}
