#include <bits/stdc++.h>
const double eps = 1e-10;
const double Pi = acos(-1);
struct Poi {
  double x, y;
  Poi() {}
  Poi(double xx, double yy) : x(xx), y(yy) {}
};
inline Poi operator+(Poi a, Poi b) { return Poi(a.x + b.x, a.y + b.y); }
inline Poi operator-(Poi a, Poi b) { return Poi(a.x - b.x, a.y - b.y); }
inline Poi operator*(Poi a, double b) { return Poi(a.x * b, a.y * b); }
inline Poi operator/(Poi a, double b) { return Poi(a.x / b, a.y / b); }
inline double dot(Poi a, Poi b) { return a.x * b.x + a.y * b.y; }
inline double length(Poi a) { return sqrt(dot(a, a)); }
inline double dist(Poi a, Poi b) { return length(b - a); }
inline double angle(Poi a) { return atan2(a.y, a.x); }
inline Poi cons(Poi a) { return a / length(a); }
inline Poi rotate(Poi a, double rad) {
  return Poi(a.x * cos(rad) - a.y * sin(rad), a.x * sin(rad) + a.y * cos(rad));
}
struct Cir {
  Poi o;
  double r;
};
const int N = 1e5 + 5;
int n, stk[N << 1], top;
double l;
Poi p, q;
Cir a[N];
std::pair<Poi, Poi> intersect(Cir a, Cir b) {
  double d = dist(a.o, b.o);
  double x = (a.r * a.r + d * d - b.r * b.r) / (2 * d);
  double z = sqrt(a.r * a.r - x * x);
  Poi mid = a.o + cons(b.o - a.o) * x;
  Poi v = rotate(cons(b.o - a.o), Pi / 2);
  return std::make_pair(mid + v * z, mid - v * z);
}
inline bool check(double mid) {
  Cir o = (Cir){q, mid};
  std::vector<std::pair<double, int>> que;
  int arc_cnt = 0;
  for (int i = 1; i <= n; ++i) {
    double d = dist(o.o, a[i].o);
    if (o.r + a[i].r > d && fabs(o.r - a[i].r) < d) {
      ++arc_cnt;
      auto tmp = intersect(o, a[i]);
      que.push_back(std::make_pair(angle(tmp.first - o.o), arc_cnt));
      que.push_back(std::make_pair(angle(tmp.second - o.o), arc_cnt));
    }
  }
  std::sort(que.begin(), que.end());
  top = 0;
  for (auto x : que) {
    if (stk[top] == x.second)
      --top;
    else
      stk[++top] = x.second;
  }
  return top != 0;
}
int main() {
  scanf("%d%lf", &n, &l);
  p = Poi(-l, 0);
  q = Poi(l, 0);
  for (int i = 1; i <= n; ++i) {
    scanf("%lf%lf", &a[i].o.x, &a[i].o.y);
    a[i].r = dist(a[i].o, p);
  }
  double l = 0, r = dist(p, q), mid;
  while (r - l >= eps) {
    mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.10lf\n", (l + r) / 2);
  return 0;
}
