// https://szkopul.edu.pl/problemset/problem/CUjJDGGSEZmO7HvdZU4FKrL6/site/?key=statement
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int sizik = 1000 * 1001;
#define ar std::array
#define pr std::pair
#define vec std::vector
typedef vec<vec<int>> _kra;
typedef long double ld;
int n, k;
int parent[sizik];
std::vector<int> kra[sizik];
int dp[sizik], dp1[sizik];
void DFS(int v, int p, ld s) {
dp1[v] = 1;
int maxi = 0;
for (const auto& u : kra[v]) {
if (u != p) {
DFS(u, v, s);
dp1[v] += dp1[u];
maxi = std::max(maxi, dp[u]);
}
}
ld x = (ld)(dp1[v] - 1) * s;
if (maxi >= x) {
dp[v] = dp1[v];
} else {
dp[v] = maxi;
}
}
bool check(ld s) {
DFS(1, 1, s);
return !(dp[1] > k);
}
void solve() {
std::cin >> n >> k;
for (int i = 2; i <= n; i++) {
int a;
std::cin >> a;
parent[i] = a;
kra[a].push_back(i);
kra[i].push_back(a);
}
ld l = 0.0, r = 1.0;
while (r - l > 1e-7) {
ld s = (l + r) / (ld)2.0;
if (check(s)) {
r = s;
} else {
l = s;
}
}
std::cout << l << '\n';
}
int32_t main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int t = 1;
std::cout << std::fixed << std::setprecision(7);
for (; t > 0; t--) {
solve();
}
return 0;
}