#include <bits/stdc++.h>
using namespace std;
const long double pi = acosl(-1);
struct point {
  long double x, y;
  point() {}
  point(long double px, long double py) : x(px), y(py) {}
};
struct event {
  long double time;
  int i, type;
  event(long double tm, int id, int tp) : time(tm), i(id), type(tp) {}
  bool operator<(const event& rhs) const {
    return make_pair(time, type) < make_pair(rhs.time, rhs.type);
  }
};
struct segment {
  long double l, r;
  segment(long double lt, long double rt) : l(lt), r(rt) {}
};
long double normalize(long double x) {
  if (x < 0) return x + 2 * pi;
  if (x > 2 * pi) return x - 2 * pi;
  return x;
}
struct fenwick_tree {
  int n;
  vector<int> t;
  fenwick_tree(int nn) : n(nn), t(nn) {}
  void add(int i, int x) {
    for (; i < n; i |= (i + 1)) t[i] += x;
  }
  int get_sum(int r) {
    int ret = 0;
    for (; r >= 0; r = (r & (r + 1)) - 1) ret += t[r];
    return ret;
  }
};
long long count_itsc(const vector<segment>& segs) {
  int n = segs.size();
  vector<long double> rs;
  for (auto [_, r] : segs) rs.push_back(r);
  sort(rs.begin(), rs.end());
  vector<event> evs;
  int id = 0;
  for (auto [l, r] : segs) {
    evs.emplace_back(l, id, 1);
    evs.emplace_back(r, id, -1);
    ++id;
  }
  sort(evs.begin(), evs.end());
  long long ans = 0;
  fenwick_tree fnw(n);
  for (auto [tm, i, tp] : evs) {
    if (tp == 1) {
      auto k = lower_bound(rs.begin(), rs.end(), segs[i].r) - rs.begin();
      ans += fnw.get_sum(k);
      fnw.add(k, 1);
    } else {
      auto j = lower_bound(rs.begin(), rs.end(), tm) - rs.begin();
      fnw.add(j, -1);
    }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(20);
  int n;
  long long k;
  cin >> n >> k;
  vector<point> p(n);
  for (int i = 0; i < (int)(n); i++) cin >> p[i].x >> p[i].y;
  long double l = 0, r = 1e6;
  for (int it = 0; it < (int)(40); it++) {
    long double mid = (l + r) / 2;
    long long inside = 0;
    vector<segment> segs;
    vector<event> evs;
    for (auto [x, y] : p) {
      long double d = hypotl(x, y);
      if (d <= mid) {
        ++inside;
        continue;
      }
      long double c = normalize(atan2l(y, x));
      long double a = acosl(mid / d);
      long double a1 = normalize(c - a), a2 = normalize(c + a);
      segs.emplace_back(min(a1, a2), max(a1, a2));
    }
    long long cnt = inside * (n - inside) + inside * (inside - 1) / 2;
    long long itsc = count_itsc(segs);
    cnt += (n - inside) * (n - inside - 1) / 2 - itsc;
    if (cnt < k)
      l = mid;
    else
      r = mid;
  }
  cout << fixed << l << endl;
  return 0;
}
