#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smin(T &a, T b) {
  if (a > b) a = b;
}
struct point {
  long double x, y, z;
  point(long double x = 0, long double y = 0, long double z = 0)
      : x(x), y(y), z(z) {}
  point operator-(point a) { return point(x - a.x, y - a.y, z - a.z); }
  point operator+(point a) { return point(x + a.x, y + a.y, z + a.z); }
  long double operator*(point a) { return x * a.x + y * a.y + z * a.z; }
  long double nor() { return sqrtl(*this * *this); }
  long double al() { return atan2l(y, x); }
  void input() { cin >> x >> y >> z; }
};
long double r, h, L;
const long double pi = acosl(-1);
void print(long double a) { printf("%.18lf\n", (double)a); }
long double ALPHA;
long double calc_1(point a, long double al) {
  long double ans = 0;
  long double be = fabsl(a.al() - al);
  if (be > 2 * pi) be -= 2 * pi;
  long double aa = (point(0, 0, h) - a).nor();
  return sqrtl(aa * aa + L * L -
               2 * aa * L * cosl(min(be, 2 * pi - be) * r / L));
}
point a, b;
long double calc1(long double al) {
  point pp = point(cosl(al) * r, sinl(al) * r, 0);
  return (pp - a).nor() + calc_1(b, al);
}
long double calc2(long double al, long double be) {
  long double alpha = fabsl(al - be);
  if (alpha > 2 * pi) alpha -= 2 * pi;
  return calc_1(a, al) + calc_1(b, be) +
         2 * sinl(min(2 * pi - alpha, alpha) / 2) * r;
}
long double calc(long double al) {
  long double ans = 1e200;
  for (int i = 0; i < 6; i++) {
    long double st = pi / 3 * i, ed = st + pi / 2, x1, x2, y1, y2;
    for (int j = 0; j < 50; j++) {
      x1 = (st * 2 + ed) / 3, x2 = (st + ed * 2) / 3;
      smin(ans, y2 = calc2(al, x2));
      smin(ans, y1 = calc2(al, x1));
      if (y1 > y2)
        st = x1;
      else
        ed = x2;
    }
    smin(ans, calc2(al, ed));
  }
  return ans;
}
int main() {
  cin >> r >> h;
  a.input(), b.input();
  L = sqrtl(r * r + h * h);
  long double ALPHA = r * 2 * pi / L;
  if (a.z < 1e-12 && b.z < 1e-12) {
    print((a - b).nor());
    return 0;
  }
  if (a.z > 1e-12 && b.z > 1e-12) {
    long double al = a.al(), be = b.al();
    point pp = point(0, 0, h);
    long double ans =
        sqrtl((pp - a) * (pp - a) + (pp - b) * (pp - b) -
              2 * (pp - a).nor() * (pp - b).nor() *
                  cosl(min(fabsl(al - be), 2 * pi - fabsl(al - be)) * r / L));
    for (int i = 0; i < 6; i++) {
      long double st = pi / 3 * i, ed = st + pi / 2, x1, x2;
      for (int j = 0; j < 50; j++) {
        x1 = (st * 2 + ed) / 3, x2 = (st + ed * 2) / 3;
        if (calc(x1) > calc(x2))
          st = x1;
        else
          ed = x2;
      }
      smin(ans, calc(ed));
    }
    print(ans);
    return 0;
  }
  if (a.z > 1e-12) swap(a, b);
  long double ans = 1e200;
  for (int i = 0; i < 6; i++) {
    long double st = pi / 3 * i, ed = st + pi / 2, x1, x2;
    for (int j = 0; j < 50; j++) {
      x1 = (st * 2 + ed) / 3, x2 = (st + ed * 2) / 3;
      if (calc1(x1) > calc1(x2))
        st = x1;
      else
        ed = x2;
    }
    smin(ans, calc1(ed));
  }
  print(ans);
  return 0;
}
