#include <bits/stdc++.h>
using namespace std;
struct point {
  long double x, y;
};
long double len(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
long double len2(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
struct circle {
  point w;
  long double r;
  circle(point _w, long double _r) {
    w.x = _w.x;
    w.y = _w.y;
    r = _r;
  }
};
bool cic(circle a, circle b) { return len(a.w, b.w) + a.r <= b.r; }
bool cnc(circle a, circle b) { return len(a.w, b.w) > a.r + b.r; }
bool pic(point a, circle b) { return len(a, b.w) <= b.r; }
pair<point, point> cross(circle a, circle b) {
  long double L = len(a.w, b.w), L2 = len2(a.w, b.w);
  circle a1 = a, b1 = b;
  long double x, x2;
  x = fabs((a.r * a.r + L2 - b.r * b.r) / (2 * L));
  x2 = fabs((a.r * a.r + L2 - b.r * b.r) / (2 * L2));
  long double t;
  t = sqrt(fabs(a.r * a.r - x * x) / len2(a.w, b.w));
  point v;
  v.x = (b.w.x - a.w.x) * x2;
  v.y = (b.w.y - a.w.y) * x2;
  point z;
  z.x = (a.w.y - b.w.y) * t;
  z.y = (b.w.x - a.w.x) * t;
  pair<point, point> res;
  res.first.x = res.second.x = a.w.x + v.x;
  res.first.y = res.second.y = a.w.y + v.y;
  res.first.x += z.x;
  res.first.y += z.y;
  res.second.x -= z.x;
  res.second.y -= z.y;
  return res;
}
int main() {
  long double t1, t2;
  point a, b, c;
  cin >> t1 >> t2 >> a.x >> a.y >> c.x >> c.y >> b.x >> b.y;
  long double ab, ac, bc;
  ab = len(a, b);
  ac = len(a, c);
  bc = len(b, c);
  if (ab + bc <= ac + t2) {
    cout.precision(10);
    cout << min(ac + t2, ab + bc + t1);
    return 0;
  }
  if (ab + t1 >= ac + t2 + bc) {
    cout.precision(10);
    cout << ac + t2;
    return 0;
  }
  long double L = 0, R = min(ab + bc + t1, ac + t2);
  long double ep = 1E-7;
  while (L + ep < R) {
    long double m = (L + R) / 2;
    circle ca(a, m), cb(b, ab + t1 - m), cc(c, ac + t2 - m);
    if (cnc(cc, cb)) {
      R = m;
      continue;
    }
    if (cic(cc, ca) || cic(cb, ca) || cic(ca, cb) && cic(ca, cc) ||
        cic(ca, cb) && !cnc(ca, cc) || cic(ca, cc) && !cnc(ca, cb)) {
      L = m;
      continue;
    }
    if (cic(ca, cb) && cnc(ca, cc) || cic(ca, cc) && cnc(ca, cb)) {
      R = m;
      continue;
    }
    pair<point, point> p1, p2, p3;
    p1 = cross(ca, cb);
    p2 = cross(ca, cc);
    p3 = cross(cb, cc);
    if (pic(p1.first, cc) || pic(p1.second, cc) || pic(p2.first, cb) ||
        pic(p2.second, cb) || pic(p3.first, ca) || pic(p3.second, ca))
      L = m;
    else
      R = m;
  }
  cout.precision(10);
  cout << L;
  return 0;
}
