#include <bits/stdc++.h>
using namespace std;
double X1, Y1, X2, Y2, X3, Y3;
double t1, t2;
double dis(double x, double y) { return sqrt(x * x + y * y); }
double dis(double x1, double y1, double x2, double y2) {
  return dis(x1 - x2, y1 - y2);
}
double solve(double x1, double y1, double x2, double y2, double t, double px,
             double py) {
  if (dis(x1, y1, px, py) + dis(px, py, x2, y2) - dis(x1, y1, x2, y2) <= t)
    return dis(x1, y1, x2, y2) + t - dis(px, py, x2, y2);
  double l = 0, r = 1;
  for (int step = 0; step < 300; step++) {
    double M = (l + r) / 2;
    double dx = (1 - M) * x1 + M * px;
    double dy = (1 - M) * y1 + M * py;
    double tmp =
        dis(x1, y1, dx, dy) + dis(dx, dy, x2, y2) - dis(x1, y1, x2, y2);
    if (tmp <= t)
      l = M;
    else
      r = M;
  }
  return l * dis(x1, y1, px, py);
}
double cc(double x, double y) {
  double tmp = solve(X1, Y1, X2, Y2, t2, x, y);
  double ret = solve(X1, Y1, X3, Y3, t1, x, y);
  return min(tmp, ret);
}
int main() {
  while (cin >> t1 >> t2) {
    cin >> X1 >> Y1 >> X2 >> Y2 >> X3 >> Y3;
    double tmp = dis(X1, Y1, X3, Y3) + dis(X3, Y3, X2, Y2);
    double ret = dis(X1, Y1, X2, Y2) + t2;
    double ans = 0;
    ans = max(cc(X2, Y2), cc(X3, Y3));
    if (tmp <= ret) {
      printf("%.6lf\n", min(ret, tmp + t1));
      continue;
    }
    double l = 0, r = 1;
    for (int i = 0; i < 300; i++) {
      double M1 = (l * 2 + r) / 3;
      double M2 = (l + r * 2) / 3;
      double px1 = X2 * (1 - M1) + X3 * M1, py1 = Y2 * (1 - M1) + Y3 * M1;
      double px2 = X2 * (1 - M2) + X3 * M2, py2 = Y2 * (1 - M2) + Y3 * M2;
      ret = cc(px1, py1);
      tmp = cc(px2, py2);
      ans = max(ans, max(ret, tmp));
      if (ret > tmp)
        r = M2;
      else
        l = M1;
    }
    printf("%.6lf\n", ans);
  }
  return 0;
}
