#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int maxn = 100000 + 5;
const long double eps = 1e-6;
long double PI = acos((long double)(-1));
long long n, m, par[maxn][20], cnt[maxn], st[maxn], fi[maxn], ti;
long long h[maxn];
long double qd[maxn], qu[maxn];
vector<int> e[maxn];
void dfs(int u, int p = -1) {
  st[u] = ti++;
  h[u] = ~p ? h[p] + 1 : 0;
  par[u][0] = p;
  bool leaf = 1;
  for (int i = 1; i < 20; i++) {
    if (~par[u][i - 1]) par[u][i] = par[par[u][i - 1]][i - 1];
  }
  int sz = e[u].size();
  for (int i = 0; i < sz; i++) {
    int v = e[u][i];
    if (v != p) {
      leaf = 0;
      dfs(v, u);
      cnt[u] += cnt[v] + 1;
    }
  }
  for (int i = 0; i < sz; i++) {
    int v = e[u][i];
    if (v != p) qd[u] += 1.0 * cnt[v] / cnt[u] * qd[v];
  }
  if (~leaf) qd[u] += 1;
  fi[u] = ti++;
}
void dfs_d(int u, int p = -1) {
  if (~p) {
    long double cntd = cnt[p] - cnt[u] - 1, nou, kcntd, kasr;
    if (cntd == 0) {
      kcntd = 1.0 / (n - cnt[u] - 1);
      qu[u] = qu[p] * kcntd * (n - cnt[p] - 1) + (n - cnt[p]) * kcntd;
    } else {
      kcntd = 1.0 / cntd;
      nou = qd[p] * kcntd * cnt[p] - qd[u] * kcntd * cnt[u] - cnt[u] * kcntd -
            kcntd;
      kasr = 1.0 / (n - cnt[u] - 1);
      qu[u] = cntd * kasr * nou + qu[p] * kasr * (n - cnt[p] - 1) + 1;
    }
  }
  int sz = e[u].size();
  for (int i = 0; i < sz; i++) {
    int v = e[u][i];
    if (v != p) dfs_d(v, u);
  }
}
int ispar(int u, int v) { return st[u] <= st[v] && fi[v] <= fi[u]; }
int up(int u, int d) {
  for (int i = 20 - 1; i >= 0; i--)
    if ((d >> i) & 1) u = par[u][i];
  return u;
}
int lca(int u, int v) {
  if (h[u] < h[v]) swap(u, v);
  u = up(u, h[u] - h[v]);
  if (u == v) return v;
  for (int i = 20 - 1; i >= 0; i--) {
    if (par[u][i] != par[v][i]) u = par[u][i], v = par[v][i];
  }
  return par[u][0];
}
long double query(int u, int v) {
  if (h[u] > h[v]) swap(u, v);
  if (ispar(u, v)) {
    int w = up(v, h[v] - h[u] - 1);
    long double cn = 1.0 / (cnt[v] + 1) / (n - cnt[w] - 1);
    long double ans = cnt[v] * (n - cnt[w] - 1) * cn * qd[v] +
                      (n - cnt[w] - 1) * (cnt[v] + 1) * cn * qu[w];
    return ans + h[v] - h[u];
  }
  int w = lca(u, v);
  long double cn = 1.0 / (cnt[u] + 1) / (cnt[v] + 1);
  long double ans =
      cnt[u] * (cnt[v] + 1) * cn * qd[u] + cnt[v] * (cnt[u] + 1) * cn * qd[v];
  return h[u] - h[w] + h[v] - h[w] + ans + 1;
}
int main() {
  std::ios_base::sync_with_stdio(false);
  cin >> n >> m;
  int u, v;
  for (int i = 0; i < n - 1; i++) {
    cin >> u >> v;
    u--;
    v--;
    e[u].push_back(v);
    e[v].push_back(u);
  }
  dfs(0);
  dfs_d(0);
  cout << fixed << setprecision(8);
  while (m--) {
    cin >> u >> v;
    cout << query(--u, --v) << endl;
  }
  return 0;
}
