#include <bits/stdc++.h>
using uint = unsigned int;
using cat = long long;
using dbl = long double;
constexpr dbl pi = 3.14159265358979323846;
using namespace std;
template <typename T>
T abs(T x) {
  return (x < 0) ? (-x) : x;
}
cat pw(cat a, cat e, cat mod) {
  if (e <= 0) return 1;
  cat x = pw(a, e / 2, mod);
  x = x * x % mod;
  return (e & 1) ? x * a % mod : x;
}
struct fin {
  vector<int> T;
  fin(int N) { T.resize(N + 10, 0); }
  int lastone(int x) { return x & (x ^ (x - 1)); }
  void put(int pos, int val) {
    for (int i = pos + 1; i < (int)T.size(); i += lastone(i)) T[i] += val;
  }
  int get(int pos) {
    int ret = 0;
    for (int i = pos + 1; i > 0; i -= lastone(i)) ret += T[i];
    return ret;
  }
};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(10);
  int N;
  cat K;
  cin >> N >> K;
  K = 1LL * N * (N - 1) / 2 - K + 1;
  vector<pair<cat, cat> > P(N);
  for (int i = 0; i < N; i++) cin >> P[i].first >> P[i].second;
  dbl ans_le = 0, ans_gt = 1e5;
  while (ans_gt - ans_le > 1e-8) {
    dbl R = (ans_le + ans_gt) / 2;
    vector<pair<dbl, int> > events;
    for (int i = 0; i < N; i++) {
      dbl d = sqrt(P[i].first * P[i].first + P[i].second * P[i].second);
      if (d < R + 1e-8) continue;
      dbl ang_c = atan2(P[i].second, P[i].first);
      if (ang_c < 0) ang_c = 2 * pi + ang_c;
      dbl ang_d = acos(R / d);
      if (ang_c - ang_d < 1e-8) {
        events.push_back({ang_c + ang_d, 2 * i});
        events.push_back({ang_c - ang_d, 2 * i + 1});
        events.push_back({ang_c - ang_d + 2 * pi, 2 * i + 1});
      } else if (ang_c + ang_d > 2 * pi - 1e-8) {
        events.push_back({ang_c + ang_d - 2 * pi, 2 * i});
        events.push_back({ang_c - ang_d, 2 * i + 1});
        events.push_back({ang_c - ang_d - 2 * pi, 2 * i + 1});
      } else {
        events.push_back({ang_c + ang_d, 2 * i});
        events.push_back({ang_c - ang_d, 2 * i + 1});
      }
    }
    sort(begin(events), end(events));
    vector<int> last_open(N, -1);
    cat cnt = 0;
    fin F(events.size());
    for (int i = 0; i < (int)events.size(); i++) {
      int id = events[i].second / 2;
      if (events[i].second % 2 == 0) {
        if (last_open[id] != -1) {
          F.put(events.size() - last_open[id], -1);
          cnt += F.get(events.size() - last_open[id]);
          last_open[id] = -1;
        }
      } else {
        last_open[id] = i;
        F.put(events.size() - i, 1);
      }
    }
    if (cnt >= K)
      ans_le = R;
    else
      ans_gt = R;
  }
  cout << ans_le << "\n";
}
