#include <bits/stdc++.h>
using namespace std;
int sig(double x) { return (x > 1e-12) - (x < -1e-12); }
struct P {
  double x, y;
  P(double a = 0, double b = 0) : x(a), y(b) {}
  P operator+(const P &a) const { return P(x + a.x, y + a.y); }
  P operator-(const P &a) const { return P(x - a.x, y - a.y); }
  P operator*(const double a) const { return P(x * a, y * a); }
  P operator/(const double a) const { return P(x / a, y / a); }
  double operator*(const P &a) const { return (x * a.x + y * a.y); }
  double operator^(const P &a) const { return (x * a.y - y * a.x); }
  int operator==(const P &a) const {
    return sig(x - a.x) == 0 & sig(y - a.y) == 0;
  }
};
double dis(P a, P b) { return sqrt((b - a) * (b - a)); }
P a, b, c, d, e;
double t1, t2;
P get(double m) {
  P ans;
  ans.x = a.x + (d.x - a.x) * m / dis(a, d);
  ans.y = a.y + (d.y - a.y) * m / dis(a, d);
  return ans;
}
double calc(double m) {
  double l, r;
  m /= dis(b, c);
  d = c + (b - c) * m;
  l = 0;
  r = dis(a, d);
  while (l + 1e-12 < r) {
    m = (l + r) / 2;
    e = get(m);
    if ((dis(a, e) + dis(e, b) > t1 + 1e-12) ||
        (dis(a, e) + dis(e, c) + dis(c, b) > t2 + 1e-12))
      r = m;
    else
      l = m;
  }
  e = get(l);
  return dis(a, e) +
         min(t1 - dis(a, e) - dis(e, b),
             t2 - dis(a, e) - dis(e, c) - dis(c, b)) +
         dis(e, b) * ((c == e) ? 1 : 0);
}
int main() {
  scanf("%lf%lf", &t2, &t1);
  scanf("%lf%lf", &a.x, &a.y);
  scanf("%lf%lf", &b.x, &b.y);
  scanf("%lf%lf", &c.x, &c.y);
  t1 += dis(a, b);
  t2 += (dis(a, c) + dis(c, b));
  double l = 0, r = dis(b, c);
  while (l + 1e-12 < r) {
    double lm = l + (r - l) / 3, rm = r - (r - l) / 3;
    if (calc(lm) < calc(rm))
      l = lm;
    else
      r = rm;
  }
  printf("%.10lf\n", max(calc(l), calc(0)));
  return 0;
}
