#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-10;
struct point {
  long double x, y;
} a, b, c;
long double t1, t2;
inline long double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
bool check(point A, long double ra, point B, long double rb, point C,
           long double rc) {
  if (dis(A, B) < fabs(ra - rb)) return 0;
  long double a = 2 * (A.x - B.x), b = 2 * (A.y - B.y);
  long double c =
      (A.x * A.x + A.y * A.y - ra * ra) - (B.x * B.x + B.y * B.y - rb * rb);
  if (b) {
    long double k = -a / b, t = c / b - A.y;
    long double _A = k * k + 1, _B = 2 * k * t - 2 * A.x,
                _C = A.x * A.x + t * t - ra * ra;
    long double tmp = sqrt(fabs(_B * _B - 4 * _A * _C));
    long double x0 = (tmp - _B) / (_A * 2), x1 = -(tmp + _B) / (_A * 2);
    long double y0 = k * x0 + t + A.y, y1 = k * x1 + t + A.y;
    if (dis(C, (point){x0, y0}) <= rc) return 1;
    if (dis(C, (point){x1, y1}) <= rc) return 1;
  } else {
    long double k = -b / a, t = c / a - A.x;
    long double _A = k * k + 1, _B = 2 * k * t - 2 * A.y,
                _C = A.y * A.y + t * t - ra * ra;
    long double tmp = sqrt(fabs(_B * _B - 4 * _A * _C));
    long double y0 = (tmp - _B) / (_A * 2), y1 = -(tmp + _B) / (_A * 2);
    long double x0 = k * y0 + t + A.x, x1 = k * y1 + t + A.x;
    if (dis(C, (point){x0, y0}) <= rc) return 1;
    if (dis(C, (point){x1, y1}) <= rc) return 1;
  }
  return 0;
}
inline bool cross(point a, long double ra, point b, long double rb, point c,
                  long double rc) {
  if (dis(a, b) > ra + rb + eps) return 0;
  if (dis(b, c) > rb + rc + eps) return 0;
  if (dis(c, a) > rc + ra + eps) return 0;
  if (dis(a, b) < rb - ra && dis(a, c) < rc - ra) return 1;
  if (dis(b, c) < rc - rb && dis(b, a) < ra - rb) return 1;
  if (dis(c, a) < ra - rc && dis(c, b) < rb - rc) return 1;
  if (check(a, ra, b, rb, c, rc)) return 1;
  if (check(b, rb, c, rc, a, ra)) return 1;
  if (check(c, rc, a, ra, b, rb)) return 1;
  return 0;
}
int main() {
  cin >> t1 >> t2 >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
  long double ab = dis(a, b), ac = dis(a, c), bc = dis(b, c);
  if (ac + bc <= ab + t2) {
    printf("%.12lf\n", (double)min(ac + bc + t1, ab + t2));
    return 0;
  }
  long double l = min(t1, t2), r = min(ac + t1, ab + t2);
  while (r - l >= eps) {
    long double mid = (l + r) * .5;
    if (cross(a, mid, b, ab + t2 - mid, c, ac + t1 - mid))
      l = mid;
    else
      r = mid;
  }
  printf("%.12lf\n", (double)l);
  return 0;
}
