#include <bits/stdc++.h>
using namespace std;
using point = complex<double>;
const double EPSILON = 1e-10;
vector<point> inter(const point& c1, double r1, const point& c2, double r2) {
  point u = c2 - c1;
  double l = abs(u);
  if (abs(r1 - r2) - EPSILON >= l) return {r1 < r2 ? c1 : c2};
  double p = (l * l + r1 * r1 - r2 * r2) / (2 * l), q = r1 * r1 - p * p;
  if (q < 0) {
    if (q < -EPSILON) return {};
    q = 0;
  }
  u /= l;
  point v = u * point(0, 1);
  u *= p;
  v *= sqrt(q);
  return {c1 + u + v, c1 + u - v};
}
bool check(vector<tuple<point, double>>& circles) {
  for (int i = 0; i < 3; i++) {
    point c1, c2, c3;
    double r1, r2, r3;
    tie(c1, r1) = circles[0];
    tie(c2, r2) = circles[1];
    tie(c3, r3) = circles[2];
    auto t = inter(c1, r1, c2, r2);
    if (t.empty()) return false;
    if (t.size() == 1) {
      if (r1 < r2)
        return !inter(c1, r1, c3, r3).empty();
      else
        return !inter(c2, r2, c3, r3).empty();
    }
    for (auto& p : t)
      if (abs(p - c3) - EPSILON <= r3) return true;
    rotate(circles.begin(), circles.begin() + 1, circles.end());
  }
  return false;
}
int main() {
  double t1, t2, cx, cy, hx, hy, sx, sy;
  ignore = scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &t1, &t2, &cx, &cy, &hx,
                 &hy, &sx, &sy);
  point c(cx, cy), h(hx, hy), s(sx, sy);
  const double sh = abs(s - h), T1 = abs(c - s) + t1, T2 = abs(c - h) + t2;
  double ans = min(T1 + sh, T2);
  if (abs(c - s) + sh > T2) {
    double lo = 0, hi = min(T1, T2);
    while (hi - lo > EPSILON) {
      ans = 0.5 * (lo + hi);
      double rh = max(0.0, T2 - ans), rs = max(0.0, T1 - ans);
      vector<tuple<point, double>> circles = {
          make_tuple(c, ans),
          make_tuple(h, rh),
          make_tuple(s, rs),
      };
      if (check(circles)) {
        lo = ans;
      } else {
        hi = ans;
      }
    }
  }
  printf("%.4lf\n", ans);
  return 0;
}
