#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point() {}
  Point(double _x, double _y) : x(_x), y(_y) {}
  void input() { scanf("%lf%lf", &x, &y); }
} p0, p1, p2;
double t1, t2;
double sqr(double a) { return a * a; }
double dist(Point p1, Point p2) {
  return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));
}
double solve(Point s, Point e, Point m, double t) {
  if (dist(s, m) + dist(m, e) <= t + dist(s, e))
    return dist(s, e) + t - dist(m, e);
  double low = 0.0, high = 1.0, mid;
  for (int step = 1; step <= 1000; step++) {
    mid = (low + high) / 2.0;
    Point p = Point(s.x + mid * (m.x - s.x), s.y + mid * (m.y - s.y));
    if (dist(s, p) + dist(p, e) <= t + dist(s, e))
      low = mid;
    else
      high = mid;
  }
  return mid * dist(s, m);
}
int main() {
  while (~scanf("%lf%lf", &t1, &t2)) {
    p0.input();
    p1.input();
    p2.input();
    double low = 0.0, high = 1.0, mid, midd, ans = 0.0;
    ans = max(ans, min(solve(p0, p1, p1, t2), solve(p0, p2, p1, t1)));
    ans = max(ans, min(solve(p0, p1, p2, t2), solve(p0, p2, p2, t1)));
    if (dist(p0, p2) + dist(p2, p1) <= t2 + dist(p0, p1)) {
      ans = max(ans, min(dist(p0, p1) + t2, dist(p0, p2) + dist(p2, p1) + t1));
    }
    for (int step = 1; step <= 1000; step++) {
      mid = low + (high - low) / 3.0;
      midd = high - (high - low) / 3.0;
      Point pa = Point(p1.x + (p2.x - p1.x) * mid, p1.y + (p2.y - p1.y) * mid);
      Point pb =
          Point(p1.x + (p2.x - p1.x) * midd, p1.y + (p2.y - p1.y) * midd);
      double r1 = min(solve(p0, p1, pa, t2), solve(p0, p2, pa, t1));
      double r2 = min(solve(p0, p1, pb, t2), solve(p0, p2, pb, t1));
      if (r1 > r2)
        high = midd, ans = max(ans, r1);
      else
        low = mid, ans = max(ans, r2);
    }
    printf("%.5lf\n", ans);
  }
  return 0;
}
