#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
double t1, t2;
complex<double> cinema, shop, house;
void readpoint(complex<double> &p) {
  double x, y;
  scanf("%lf %lf", &x, &y);
  p = complex<double>(x, y);
}
bool inter(complex<double> a, double r_a, complex<double> b, double r_b,
           complex<double> c, double r_c) {
  if (abs(c - a) <= r_a && abs(c - b) <= r_b) return true;
  b -= a;
  c -= a;
  complex<double> r = complex<double>(b.real() / abs(b), b.imag() / abs(b));
  b /= r;
  c /= r;
  double d = (r_a * r_a - r_b * r_b + abs(b) * abs(b)) / (2 * abs(b));
  double h = sqrt(max(r_a * r_a - d * d, 0.0));
  if (abs(h * h + (d - abs(b)) * (d - abs(b))) - r_b * r_b > eps) return false;
  if (abs(complex<double>(d, h) - c) <= r_c ||
      abs(complex<double>(d, -h) - c) <= r_c)
    return true;
  return false;
}
bool check(complex<double> a, double r_a, complex<double> b, double r_b,
           complex<double> c, double r_c) {
  if (r_a <= eps || r_b <= eps || r_c <= eps) return false;
  r_a = max(r_a, 0.0);
  r_b = max(r_b, 0.0);
  r_c = max(r_c, 0.0);
  if (inter(a, r_a, c, r_c, b, r_b)) return true;
  if (inter(b, r_b, a, r_a, c, r_c)) return true;
  if (inter(c, r_c, b, r_b, a, r_a)) return true;
  return false;
}
int main() {
  scanf("%lf %lf", &t1, &t2);
  readpoint(cinema);
  readpoint(house);
  readpoint(shop);
  if (abs(shop - cinema) + abs(house - shop) <= abs(cinema - house) + t2) {
    printf("%lf\n", min(abs(cinema - house) + t2,
                        abs(shop - cinema) + abs(house - shop) + t1));
  } else {
    double l, r, mid;
    l = 0;
    r = min(abs(cinema - house) + t2,
            abs(shop - cinema) + abs(house - shop) + t1);
    for (int i = 1; i <= 200; i++) {
      mid = (r + l) / 2;
      if (check(cinema, mid, shop, abs(shop - cinema) + t1 - mid, house,
                abs(house - cinema) + t2 - mid)) {
        l = mid;
      } else {
        r = mid;
      }
    }
    printf("%.4lf\n", l);
  }
  return 0;
}
