#include <bits/stdc++.h>
using namespace std;
int const X_MAX = 10000, N = 100000;
double const pi = acos(-1);
int n;
long long k;
struct P {
  int x, y;
  void sc() { scanf("%d%d", &x, &y); }
  double ang() const { return atan2(y, x); }
  double L() const { return sqrt(x * x + y * y); }
} p[N];
void remap_ang(double &th) {
  if (th < -pi)
    th += 2 * pi;
  else if (th > pi)
    th -= 2 * pi;
}
void remap_seg(pair<double, double> &seg) {
  remap_ang(seg.first);
  remap_ang(seg.second);
}
struct OP {
  double t;
  int tp, id;
  OP(double T, int TP, int ID) : t(T), tp(TP), id(ID) {}
  bool operator<(OP const &o) const { return t < o.t; }
};
int lst[N], fn[2 * N + 1], fnn;
void adfn(int i, int v) {
  while (i <= fnn) fn[i] += v, i += i & -i;
}
int gtfn(int i) {
  int an = 0;
  while (i) an += fn[i], i ^= i & -i;
  return an;
}
long long solve_op(vector<OP> op) {
  sort(op.begin(), op.end());
  long long an = 0;
  fnn = op.size() >> 1;
  int idtm = 0;
  for (int i = 1; i < (int)(fnn + 1); ++i) fn[i] = 0;
  for (int i = 0; i < (int)(op.size()); ++i) {
    OP &t = op[i];
    if (t.tp == 1) {
      ++idtm;
      adfn(idtm, 1);
      lst[t.id] = idtm;
    } else {
      adfn(lst[t.id], -1);
      if (t.tp == 2) an += gtfn(idtm) - gtfn(lst[t.id] - 1);
    }
  }
  return an;
}
long long solve_seg(vector<pair<double, double> > seg) {
  vector<OP> op;
  for (int i = 0; i < (int)(seg.size()); ++i) {
    op.emplace_back(seg[i].first, 1, i);
    op.emplace_back(seg[i].second + (seg[i].first > seg[i].second ? 2 * pi : 0),
                    2, i);
  }
  for (int i = 0; i < (int)(seg.size()); ++i) {
    op.emplace_back(seg[i].first + 2 * pi, 1, i);
    op.emplace_back(
        seg[i].second + 2 * pi + (seg[i].first > seg[i].second ? 2 * pi : 0), 0,
        i);
  }
  return solve_op(op);
}
long long get_number(double r) {
  vector<pair<double, double> > seg;
  int inside = 0;
  long long an = 0;
  for (int i = 0; i < (int)(n); ++i) {
    double L = p[i].L();
    if (L <= r) {
      ++inside;
      an += n - inside;
    } else {
      double s = p[i].ang();
      double a = acos(r / L);
      seg.emplace_back(s - a, s + a);
      remap_seg(seg.back());
    }
  }
  an += (long long)seg.size() * (seg.size() - 1) / 2 - solve_seg(seg);
  return an;
}
int main() {
  scanf("%d%lld", &n, &k);
  for (int i = 0; i < (int)(n); ++i) p[i].sc();
  double l = 0.0, r = X_MAX * sqrt(2) + 1;
  for (int it = 0; it < (int)(50); ++it) {
    double m = (l + r) * 0.5;
    if (get_number(m) < k)
      l = m;
    else
      r = m;
  }
  printf("%.6lf\n", l);
}
