#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
int IT_MAX = 1 << 17;
const long long MOD = 987654321;
const int INF = 1034567890;
const long long LL_INF = 3234567890123456789ll;
const double PI = acos(-1);
const long double ERR = 1E-10;
inline long double sq(long double a) { return a * a; }
class Circle {
 public:
  long double x, y, r;
  Circle() { *this = Circle(0, 0, 0); }
  Circle(int X, int Y, long double R) { x = X, y = Y, r = R; }
  pair<long double, long double> meets(Circle k) {
    long double d = sqrt(sq(x - k.x) + sq(y - k.y));
    if (d + ERR > r + k.r) return pair<long double, long double>(0, -1);
    if (d < abs(r - k.r) + ERR) return pair<long double, long double>(0, -1);
    long double rt = atan2(k.y - y, k.x - x);
    long double u = acos((d * d + r * r - k.r * k.r) / (2 * d * r));
    long double r1 = rt - u;
    long double r2 = rt + u;
    if (r1 < 0) r1 += 2 * PI;
    if (r2 < 0) r2 += 2 * PI;
    if (r1 >= 2 * PI) r1 -= 2 * PI;
    if (r2 >= 2 * PI) r2 -= 2 * PI;
    if (r1 > r2) swap(r1, r2);
    return pair<long double, long double>(r1, r2);
  }
};
int in[100050][2];
vector<pair<long double, long double> > V;
vector<pair<int, int> > V2;
map<long double, int> Mx;
int bit[600000];
void update(int p, int v) {
  for (; p <= IT_MAX; p += p & (-p)) bit[p] += v;
}
int getsum(int p) {
  int rv = 0;
  for (; p > 0; p -= p & (-p)) rv += bit[p];
  return rv;
}
int main() {
  int N, A, i;
  scanf("%d %d", &N, &A);
  for (i = 1; i <= N; i++) scanf("%d %d", &in[i][0], &in[i][1]);
  long double st = ERR, en = 2 * A, mi;
  for (int iter = 1; iter <= 100; iter++) {
    mi = (st + en) / 2;
    V.clear();
    V2.clear();
    Mx.clear();
    Circle c = Circle(A, 0, mi);
    for (i = 1; i <= N; i++) {
      Circle u =
          Circle(in[i][0], in[i][1], sqrt(sq(in[i][0] + A) + sq(in[i][1])));
      pair<long double, long double> rv = c.meets(u);
      if (rv.first > rv.second) continue;
      V.push_back(pair<long double, long double>(rv.first, rv.second));
      Mx[rv.first] = 0;
      Mx[rv.second] = 0;
    }
    i = 1;
    for (auto &it : Mx) it.second = i++;
    for (auto it : V) V2.push_back(pair<int, int>(Mx[it.first], Mx[it.second]));
    sort(V2.begin(), V2.end());
    for (IT_MAX = 2; IT_MAX < i; IT_MAX *= 2)
      ;
    for (i = 1; i <= IT_MAX; i++) bit[i] = 0;
    for (i = 0; i < V2.size(); i++) {
      int rv = getsum(V2[i].second) - getsum(V2[i].first - 1);
      if (rv != 0) break;
      update(V2[i].second, 1);
    }
    if (i < V2.size())
      en = mi;
    else
      st = mi;
  }
  printf("%.20lf\n", (double)mi);
  return 0;
}
