#include <bits/stdc++.h>
struct po {
  double x, y;
} a, b, c, q, xx;
double l, r, t1, t2;
int i;
using namespace std;
double di(po a, po b) {
  return (sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)));
}
double work(double p) {
  q.x = c.x * p + b.x * (1 - p);
  q.y = c.y * p + b.y * (1 - p);
  double dqa = di(q, a);
  double dbc = di(b, c);
  if (dqa < min(t2 - dbc * (1 - p), t1 - dbc * (1 + p)) + 0.000000000001)
    return (min(t2 - dbc * (1 - p), t1 - dbc * (1 + p)) + 0.000000000001);
  double ll, rr, mi;
  ll = 0;
  rr = 1;
  for (int i = 1; i <= 200; i++) {
    mi = (ll + rr) * 0.5;
    xx.x = q.x * mi + a.x * (1 - mi);
    xx.y = q.y * mi + a.y * (1 - mi);
    double dxb = di(xx, b);
    double dxc = di(xx, c);
    if (dqa * mi + dxb + dbc < t1 + 0.000000000001 &&
        dqa * mi + dxc < t2 + 0.00000000001)
      ll = mi;
    else
      rr = mi;
  }
  return ll * dqa;
}
int main() {
  cin >> t1 >> t2;
  cin >> a.x >> a.y >> c.x >> c.y >> b.x >> b.y;
  t1 += di(a, b) + di(b, c);
  t2 += di(a, c);
  l = 0;
  r = 1;
  if (di(a, b) + di(b, c) < t2 + 0.000000000001) {
    printf("%.9lf\n", min(t1, t2));
    return 0;
  }
  for (i = 1; i <= 200; i++) {
    double mi = (l * 2 + r) / 3;
    double mii = (l + r * 2) / 3;
    if (work(mi) > work(mii))
      r = mii;
    else
      l = mi;
  }
  printf("%.9lf\n", work(l));
}
