#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-9, pi = acos(-1);
int n, m, x[100002], y[100002], fa[22][100002], len;
long double xa, ya, xb, yb, L;
bool fl[100002];
typedef struct {
  long double l, r;
} P;
struct PP {
  long double x;
  int num;
};
bool cmp(P aa, P bb) { return (aa.l < bb.l); }
bool operator<(PP aa, PP bb) {
  return (aa.x < bb.x || aa.x == bb.x && aa.num < bb.num);
}
P p[200002], t[200002];
multiset<PP> q;
long double dis(long long x, long long y, long long xx, long long yy) {
  return (sqrt((x - xx) * (x - xx) + (y - yy) * (y - yy)));
}
int pd(long double r) {
  for (int i = 1; i <= n; i++)
    if (dis(x[i], y[i], 0, 0) < r) return m + 1;
  L = 2 * pi;
  for (int i = 1; i <= n; i++) {
    long double d =
        acos(r / sqrt((long long)x[i] * x[i] + (long long)y[i] * y[i]));
    long double t = atan2(y[i], x[i]);
    p[i].l = t - d;
    p[i].r = t + d;
    while (p[i].l < 0) p[i].l += L;
    while (p[i].l > L) p[i].l -= L;
    while (p[i].r < 0) p[i].r += L;
    while (p[i].r > L) p[i].r -= L;
    if (p[i].l < p[i].r) {
      if (p[i].r - p[i].l > pi) swap(p[i].l, p[i].r);
    } else {
      if (p[i].r + L - p[i].l > pi) swap(p[i].l, p[i].r);
    }
    p[i + n].l = p[i].l + L;
    p[i + n].r = p[i].r + L;
  }
  sort(p + 1, p + 2 * n + 1, cmp);
  memset(fl, 0, sizeof(fl));
  q.clear();
  for (int i = 1; i <= 2 * n; i++) {
    if (i - n >= 1) {
      if (p[i - n].l < p[i - n].r) {
        PP aa;
        aa.x = p[i - n].r;
        aa.num = i - n;
        if (q.count(aa)) q.erase(aa);
      } else {
        PP aa;
        aa.x = p[i - n].r + L;
        aa.num = i - n;
        if (q.count(aa)) q.erase(aa);
      }
    }
    while (!q.empty()) {
      multiset<PP>::iterator it = q.end();
      it--;
      if (p[i].l <= p[i].r && p[i].r < (*it).x ||
          p[i].l > p[i].r && p[i].r + L < (*it).x) {
        if ((*it).num > n)
          fl[(*it).num - n] = 1;
        else
          fl[(*it).num] = 1;
        q.erase(it);
      } else
        break;
    }
    if (p[i].l < p[i].r) {
      PP aa;
      aa.x = p[i].r;
      aa.num = i;
      q.insert(aa);
    } else {
      PP aa;
      aa.x = p[i].r + L;
      aa.num = i;
      q.insert(aa);
    }
  }
  len = 0;
  for (int i = 1; i <= n; i++)
    if (!fl[i]) t[++len] = p[i];
  for (int i = 1; i <= len; i++) {
    t[i + len].l = t[i].l + L;
    t[i + len].r = t[i].r + L;
  }
  for (int i = 1; i <= 2 * len; i++) {
    int lef = i, righ = min(i + len, 2 * len), mid;
    while (lef < righ) {
      mid = (lef + righ + 1) / 2;
      if (t[i].l <= t[i].r && t[mid].l <= t[i].r ||
          t[i].l > t[i].r && t[mid].l <= t[i].r + L)
        lef = mid;
      else
        righ = mid - 1;
    }
    fa[0][i] = lef + 1;
  }
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= 2 * len; j++) fa[i][j] = fa[i - 1][fa[i - 1][j]];
  int Min = m + 1;
  for (int i = 1; i <= len; i++) {
    int ans = 0, x = i;
    for (int j = 20; j >= 0; j--)
      if (fa[j][x] && fa[j][x] < i + len) {
        ans += (1 << j);
        x = fa[j][x];
      }
    Min = min(Min, ans + 1);
  }
  return Min;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d%d", &x[i], &y[i]);
  long double lef = 0, righ = 1e7, mid;
  while (lef + eps < righ) {
    mid = (lef + righ) / 2;
    if (pd(mid) <= m)
      lef = mid;
    else
      righ = mid;
  }
  printf("%.7lf\n", (double)lef);
  return 0;
}
