#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
struct T {
  double x, y;
} a, b, c, d, e;
double t1, t2, l, r;
double dist(T a, T b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
T point(double mid) {
  e.x = a.x + (d.x - a.x) * mid / dist(a, d),
  e.y = a.y + (d.y - a.y) * mid / dist(a, d);
  return e;
}
double la(double mid) {
  double l, r;
  mid /= dist(b, c);
  d.x = c.x + (b.x - c.x) * mid, d.y = c.y + (b.y - c.y) * mid;
  l = 0, r = dist(a, d);
  while (l + eps < r) {
    mid = (l + r) / 2;
    e = point(mid);
    if (dist(a, e) + dist(e, b) > t1 + eps ||
        dist(a, e) + dist(e, c) + dist(c, b) > t2 + eps)
      r = mid;
    else
      l = mid;
  }
  e = point(l);
  return dist(a, e) +
         min(t1 - dist(a, e) - dist(e, b),
             t2 - dist(a, e) - dist(e, c) - dist(c, b)) +
         dist(e, b) * (fabs(c.x - e.x) < eps && fabs(c.y - e.y) < eps);
}
int main() {
  cin >> t2 >> t1 >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
  t1 += dist(a, b), t2 += dist(a, c) + dist(c, b);
  l = 0, r = dist(b, c);
  for (int i = 0; i < 100; i++) {
    double lm = l + (r - l) / 3, rm = r - (r - l) / 3;
    if (la(lm) < la(rm))
      l = lm;
    else
      r = rm;
  }
  printf("%.10f\n", max(la(l), la(0)));
  return 0;
}
