#include <bits/stdc++.h>
const double eps = 1e-8;
const double pi = acos(-1.0);
struct Segment {
  double l, r;
  bool operator<(Segment b) const {
    if (fabs(r - b.r) < eps)
      return l < b.l;
    else
      return r < b.r;
  }
} seg[200100];
struct Point {
  double dis, arg;
} point[200100];
int n, f[30][200100], m;
bool check(double dis) {
  for (int i = 1; i <= n; i++) {
    if (dis > point[i].dis) return 0;
    double angle = acos(dis / point[i].dis);
    seg[i] = {point[i].arg - angle, point[i].arg + angle};
    if (seg[i].r > pi) seg[i].l -= pi * 2, seg[i].r -= pi * 2;
  }
  std::sort(seg + 1, seg + n + 1);
  for (int i = 1; i <= n; i++)
    seg[i + n] = {seg[i].l + pi * 2, seg[i].r + pi * 2};
  f[0][2 * n + 1] = 2 * n + 1;
  for (int i = 1, j = 0; i <= 2 * n; i++) {
    if (j <= i) j = i + 1;
    while (j <= 2 * n && seg[j].l < seg[i].r) j++;
    f[0][i] = j;
  }
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= 2 * n + 1; j++) f[i][j] = f[i - 1][f[i - 1][j]];
  for (int i = 1, j; i <= n; i++) {
    j = i;
    for (int k = 20; k >= 0; k--)
      if (m >> k & 1) j = f[k][j];
    if (j >= i + n) return 1;
  }
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, x, y; i <= n; i++) {
    scanf("%d%d", &x, &y);
    point[i].arg = atan2(x, y);
    point[i].dis = sqrt(1ll * x * x + 1ll * y * y);
  }
  double L = 0, R = point[1].dis;
  while (R - L > 1e-10) {
    double mid = (L + R) / 2;
    if (check(mid))
      L = mid;
    else
      R = mid;
  }
  printf("%.11lf", L);
}
