#include <bits/stdc++.h>
const double PI = acos(-1);
int N;
long long A;
struct point {
  long long x, y;
} p[100001];
struct line {
  double start, end;
} q[100001];
inline long long sqr(long long x) { return x * x; }
inline double tan_360(double x, double y) {
  if (x == 0) return PI * (y > 0 ? 0.5 : 1.5);
  if (y == 0) return PI * (x > 0 ? 0.0 : 1.0);
  double ans = atan(y / x);
  if (x > 0 && y > 0) return ans;
  if (x < 0 && y > 0) return ans + PI;
  if (x < 0 && y < 0) return ans + PI;
  return ans + PI * 2;
}
bool check(double mid) {
  int L = 0;
  for (int i = 1; i <= N; i++)
    if (sqrt(sqr(A + p[i].x) + sqr(p[i].y)) <=
        mid - sqrt(sqr(A - p[i].x) + sqr(p[i].y)))
      return true;
  for (int i = 1; i <= N; i++) {
    double R1 = mid, R2 = sqrt(sqr(A - p[i].x) + sqr(p[i].y)),
           dis = sqrt(sqr(A + p[i].x) + sqr(p[i].y));
    if (R1 + R2 > dis && R1 + dis > R2 && R2 + dis > R1) {
      double mid_angle = tan_360(p[i].x + A, p[i].y),
             dif = acos((R1 * R1 + dis * dis - R2 * R2) / (2 * R1 * dis));
      q[++L] = {mid_angle < dif ? mid_angle - dif + 2 * PI : mid_angle - dif,
                mid_angle + dif >= 2 * PI ? mid_angle + dif - 2 * PI
                                          : mid_angle + dif};
      if (q[L].start > q[L].end) std::swap(q[L].start, q[L].end);
    }
  }
  std::sort(q + 1, q + L + 1, [](const line &a, const line &b) {
    return a.start < b.start || a.start == b.start && a.end < b.end;
  });
  static int stack[100001];
  int D = 0;
  for (int i = 1; i <= L; i++) {
    while (D && q[stack[D]].end < q[i].start) D--;
    if (D && q[stack[D]].end < q[i].end) return true;
    stack[++D] = i;
  }
  return false;
}
int main() {
  scanf("%d%lld", &N, &A);
  for (int i = 1; i <= N; i++) scanf("%lld%lld", &p[i].x, &p[i].y);
  double l = 0, r = A * 2;
  for (int T = 55; T--;) {
    double mid = (l + r) / 2;
    (check(mid) ? r : l) = mid;
  }
  printf("%.10lf\n", l);
  return 0;
}
