#include <bits/stdc++.h>
using ul = std::uint32_t;
using li = std::int32_t;
using ll = std::int64_t;
using ull = std::uint64_t;
using vul = std::vector<ul>;
using vvul = std::vector<vul>;
using pulul = std::pair<ul, ul>;
using lf = long double;
ul n, m;
const lf pi = std::acos(lf(-1));
const lf eps = 1e-7;
class point {
 public:
  lf x = 0;
  lf y = 0;
  lf rho = 0;
  lf theta = 0;
};
class segment {
 public:
  lf s = 0;
  lf t = 0;
  ul id = 0;
};
point data[100000];
segment segs[300000];
std::vector<segment> segv;
ul f[300000];
ul g[300000];
lf inner(const point& a, const point& b) { return a.x * b.x + a.y * b.y; }
lf norm2(const point& a) { return inner(a, a); }
lf mysqrt(lf x) { return std::sqrt(std::max(x, lf(0))); }
lf norm(const point& a) { return mysqrt(norm2(a)); }
lf myasin(lf x) { return std::asin(std::max(lf(-1), std::min(lf(1), x))); }
lf myacos(lf x) { return std::acos(std::max(lf(-1), std::min(lf(1), x))); }
lf theta(const point& a) {
  lf rho = norm(a);
  lf x = a.x;
  lf y = a.y;
  if (x < 0) {
    if (y < 0) {
      return pi + myacos(-x / rho);
    } else {
      return pi - myacos(-x / rho);
    }
  } else {
    if (y < 0) {
      return pi + pi - myacos(x / rho);
    } else {
      return myacos(x / rho);
    }
  }
}
int main() {
  std::scanf("%u%u", &n, &m);
  lf mx = 1.5e5;
  for (ul i = 0; i != n; ++i) {
    double tx, ty;
    std::scanf("%lf%lf", &tx, &ty);
    data[i].x = tx;
    data[i].y = ty;
    data[i].rho = norm(data[i]);
    data[i].theta = theta(data[i]);
    mx = std::min(mx, data[i].rho);
    if (data[i].x == 0 && data[i].y == 0) {
      std::printf("%.20lf\n", lf(0));
      return 0;
    }
  }
  lf mn = 0;
  while (mx - mn > eps) {
    lf mid = (mx + mn) * lf(0.5);
    for (ul i = 0; i != n; ++i) {
      lf temp = myacos(mid / data[i].rho);
      segs[i].s = data[i].theta - temp;
      segs[i].t = data[i].theta + temp;
      segs[i + n].s = segs[i].s + pi + pi;
      segs[i + n].t = segs[i].t + pi + pi;
      segs[i + n + n].s = segs[i + n].s + pi + pi;
      segs[i + n + n].t = segs[i + n].t + pi + pi;
    }
    std::sort(segs, segs + n + n + n,
              [](const segment& a, const segment& b) { return a.t < b.t; });
    segv.resize(0);
    for (ul i = 0; i != n + n + n; ++i) {
      segs[i].id = i;
      segv.push_back(segs[i]);
    }
    ul key = 4e5;
    ul keyid = 0;
    for (ul i = 0, j = 0; i != segv.size(); ++i) {
      for (; j != segv.size() && segv[j].s <= segv[i].t; ++j) {
        g[j] = i - 1;
        if (j >= n && j < n + n) {
          if (key > j - i) {
            key = j - i;
            keyid = j;
          }
        }
      }
      f[i] = j;
    }
    if (ull(key) * ull(m) >= ull(n)) {
      mn = mid;
      continue;
    }
    bool flag = false;
    for (ul i = keyid; i != g[keyid]; --i) {
      ul j;
      ul cnt;
      for (j = i, cnt = 0;
           cnt != m && j != segv.size() && segv[j].id < segv[i].id + n;
           j = f[j], ++cnt)
        ;
      if (j == segv.size() || segv[j].id >= segv[i].id + n) {
        flag = true;
        break;
      }
    }
    if (flag) {
      mn = mid;
    } else {
      mx = mid;
    }
  }
  std::printf("%.20lf\n", double(mn));
  return 0;
}
