#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 5;
const double eps = 1e-10;
const double pi = 3.1415926535897932384526433832795028841971693993751058;
double inline sqr(double x) { return x * x; }
int n;
double a;
double x[maxn], y[maxn];
double r[maxn];
void inline Init() {
  scanf("%d %lf", &n, &a);
  for (int i = 1; i <= n; ++i) {
    scanf("%lf %lf", x + i, y + i);
    r[i] = sqrt(sqr(y[i]) + sqr(x[i] + a));
  }
}
struct Point {
  double r;
  int id;
  Point() {}
  Point(double a, int b) : r(a), id(b) {}
  bool operator<(const Point &rts) const { return r < rts.r; }
} p[maxn * 2];
int cnt;
bool inray[maxn];
int memo[maxn];
bool inline check(double rid) {
  double d, L, R, u, t;
  cnt = 0;
  for (int i = 1; i <= n; ++i) {
    d = sqrt(sqr(y[i]) + sqr(x[i] - a));
    if ((rid + r[i] < d) || (r[i] > rid + d) || (rid > r[i] + d)) continue;
    u = atan2(y[i], x[i] - a);
    t = acos((sqr(d) + sqr(rid) - sqr(r[i])) / (2 * d * rid));
    L = u - t, R = u + t;
    if (L < 0) L += 2 * pi;
    if (R < 0) R += 2 * pi;
    p[++cnt] = Point(L, i), p[++cnt] = Point(R, i);
  }
  sort(p + 1, p + cnt + 1);
  memset(inray, 0, sizeof inray);
  int tot = 0;
  for (int i = 1; i <= cnt; ++i) {
    if (inray[p[i].id]) {
      inray[p[i].id] = false, --tot;
      if (memo[p[i].id] != tot) return true;
    } else {
      memo[p[i].id] = tot;
      inray[p[i].id] = true, ++tot;
    }
  }
  return false;
}
void inline Solve() {
  double l = 0, r = 2 * a;
  while (abs(r - l) > eps) {
    double mid = (r + l) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.10lf\n", l);
}
int main() {
  Init();
  Solve();
  return 0;
}
