#include <bits/stdc++.h>
using ll = long long;
using ld = long double;
const ld PI = 4 * atanl(1);
const ld EPS = 1e-12;
const int MN = 1e5 + 10;
struct vec {
 public:
  int x, y;
  void in() { scanf("%d%d", &x, &y); }
  ld mag() const { return hypotl(x, y); }
  ld ang() const { return atan2l(y, x); }
};
struct Evt {
 public:
  ld t;
  int v;
  Evt(ld _t = 0, int _v = 0) : t(_t), v(_v) {}
  bool operator<(const Evt& o) const { return t < o.t; }
};
struct BIT {
 public:
  int a[MN * 2], L;
  void reset(int _L) {
    memset(a, 0, L * sizeof *a);
    L = _L;
  }
  void upd(int n, int v) {
    for (++n; n <= L; n += -n & n) a[n - 1] += v;
  }
  int qry(int n) {
    int f = 0;
    for (; n; n -= -n & n) f += a[n - 1];
    return f;
  }
  int qry(int l, int r) { return qry(r) - qry(l); }
};
int N, p[MN];
ll K;
vec a[MN];
std::vector<Evt> evt;
BIT bit;
ll count(ld d) {
  ll f = (ll)N * (N - 1) / 2;
  int ctr = 0;
  for (int i = 0; i < N; ++i)
    if (d < a[i].mag()) {
      ld m = a[i].ang();
      ld dif = acosl(d / a[i].mag());
      ld s = m - dif, e = m + dif;
      if (s + EPS < 0) s += 2 * PI, e += 2 * PI;
      if (2 * PI < e + EPS) e -= 2 * PI;
      if (e < s) std::swap(s, e);
      evt.push_back({s, ctr});
      evt.push_back({e, ctr});
      ctr++;
    }
  std::sort(evt.begin(), evt.end());
  memset(p, -1, ctr * sizeof *p);
  bit.reset(ctr * 2);
  for (int i = 0; i < evt.size(); ++i) {
    int v = evt[i].v;
    if (~p[v])
      bit.upd(p[v], -1), f -= bit.qry(p[v] + 1, i);
    else
      p[v] = i, bit.upd(i, 1);
  }
  evt.clear();
  return f;
}
int main() {
  scanf("%d%lld", &N, &K);
  for (int i = 0; i < N; ++i) a[i].in();
  ld l = -logl(1e8), r = logl(2e4), m;
  for (int i = 0; i < 100; ++i) {
    ld m = (r + l) / 2;
    if (count(exp(m)) < K)
      l = m;
    else
      r = m;
  }
  printf("%.9lf\n", (double)exp(r));
  return 0;
}
