#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-12;
struct P {
  double x, y;
  P(double x = 0, double y = 0) : x(x), y(y){};
} a, b, c, o, p;
P operator+(P a, P b) { return P(a.x + b.x, a.y + b.y); }
P operator*(P a, double b) { return P(a.x * b, a.y * b); }
inline double dis(P a, P b) {
  return sqrt(((a.x - b.x) * (a.x - b.x)) + ((a.y - b.y) * (a.y - b.y)));
}
inline void read(P &a) { scanf("%lf%lf", &a.x, &a.y); }
double t1, t2, l, r, m, m1, m2, ab, bc, ac, ap;
double Calc(double k) {
  p = b * (1 - k) + c * k;
  ap = dis(a, p);
  if (ap + bc * (1 + k) < t1 && ap + bc * (1 - k) < t2)
    return min(t1 - bc * (1 + k), t2 - bc * (1 - k));
  double l = 0, r = 1;
  for (int i = 0; i < 100; ++i) {
    m = (l + r) * 0.5;
    o = a * (1 - m) + p * m;
    if (ap * m + dis(o, b) + bc < t1 && ap * m + dis(o, c) < t2)
      l = m;
    else
      r = m;
  }
  return (l + r) * 0.5 * ap;
}
int main() {
  scanf("%lf%lf", &t1, &t2);
  read(a);
  read(c);
  read(b);
  ab = dis(a, b);
  bc = dis(b, c);
  ac = dis(a, c);
  t1 += ab + bc + eps;
  t2 += ac + eps;
  if (ab + bc < t2) {
    printf("%.10lf\n", min(t1, t2));
    return 0;
  }
  l = 0, r = 1;
  for (int i = 0; i < 100; ++i) {
    m1 = (l + l + r) / 3;
    m2 = (l + r + r) / 3;
    if (Calc(m1) < Calc(m2))
      l = m1;
    else
      r = m2;
  }
  printf("%.10lf\n", Calc((l + r) * .5));
  return 0;
}
