#include <bits/stdc++.h>
using namespace std;
int n, m;
int l[100100], p[100100][30], t[100100];
long long e[100100], e2[100100];
long long c[100100], c2[100100];
vector<vector<int> > v;
pair<long long, long long> dfs(int ind, int h) {
  l[ind] = h;
  e[ind] = c[ind] = 0;
  for (int i = 0; i < v[ind].size(); i++) {
    int nn = v[ind][i];
    if (l[nn] == -1) {
      t[nn] = ind;
      pair<long long, long long> ret = dfs(nn, h + 1);
      e[ind] += ret.first;
      c[ind] += ret.second;
    }
  }
  e[ind] += c[ind];
  c[ind]++;
  return pair<long long, long long>(e[ind], c[ind]);
}
void dfs2(int ind, pair<long long, long long> x) {
  e2[ind] = x.first;
  c2[ind] = x.second + 1LL;
  for (int i = 0; i < v[ind].size(); i++) {
    int nn = v[ind][i];
    if (nn != t[ind]) {
      dfs2(nn, pair<long long, long long>(e2[ind] + e[ind] - (e[nn] + c[nn]) +
                                              c2[ind] + c[ind] - c[nn] - 1LL,
                                          c2[ind] + c[ind] - c[nn] - 1LL));
    }
  }
}
void pre() {
  memset(p, -1, sizeof(p));
  for (int i = 0; i < n; i++) {
    p[i][0] = t[i];
  }
  for (int j = 1; (1 << j) < n; j++) {
    for (int i = 0; i < n; i++) {
      int k = p[i][j - 1];
      if (k != -1) {
        p[i][j] = p[k][j - 1];
      }
    }
  }
}
int lca(int x, int y) {
  if (l[x] < l[y]) {
    swap(x, y);
  }
  int lg;
  for (lg = 1; (1 << lg) <= l[x]; lg++)
    ;
  lg--;
  for (int i = lg; i >= 0; i--) {
    if (l[x] - (1 << i) >= l[y]) {
      x = p[x][i];
    }
  }
  if (x == y) {
    return x;
  }
  for (int i = lg; i >= 0; i--) {
    if (p[x][i] != -1 && p[x][i] != p[y][i]) {
      x = p[x][i];
      y = p[y][i];
    }
  }
  return t[x];
}
int anc(int x, int d) {
  int lg;
  for (lg = 1; (1 << lg) <= d; lg++)
    ;
  lg--;
  for (int i = lg; i >= 0; i--) {
    if ((1 << i) <= d) {
      x = p[x][i];
      d -= (1 << i);
    }
  }
  return x;
}
int main() {
  scanf("%d %d", &n, &m);
  v.resize(n);
  int x, y;
  for (int i = 1; i < n; i++) {
    scanf("%d %d", &x, &y);
    x--, y--;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  memset(l, -1, sizeof(l));
  dfs(0, 0);
  pre();
  dfs2(0, pair<long long, long long>(0, 0));
  while (m--) {
    scanf("%d %d", &x, &y);
    x--, y--;
    int z = lca(x, y);
    double d = l[x] - l[z] + l[y] - l[z];
    if (z == x) {
      int k = anc(y, l[y] - l[x] - 1);
      long long te = e[x] + e2[x];
      long long tc = c[x] + c2[x] - 1ll;
      te -= e[k] + c[k];
      tc -= c[k];
      d +=
          (double)(te) / (double)(tc) + (double)(e[y]) / (double)(c[y]) + 1.000;
    } else if (z == y) {
      int k = anc(x, l[x] - l[y] - 1);
      long long te = e[y] + e2[y];
      long long tc = c[y] + c2[y] - 1ll;
      te -= e[k] + c[k];
      tc -= c[k];
      d +=
          (double)(e[x]) / (double)(c[x]) + (double)(te) / (double)(tc) + 1.000;
    } else {
      d += (double)(e[x]) / (double)(c[x]) + (double)(e[y]) / (double)(c[y]) +
           1.000;
    }
    printf("%.6lf\n", d);
  }
  return 0;
}
