#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100000;
const int MOD = 1000000007;
vector<int> g[MAXN + 1];
int n, sz[MAXN + 1], down[MAXN + 1], down_move[MAXN + 1];
int cnt, can_win[MAXN + 1], win_move[MAXN + 1];
long long dp[MAXN + 1];
void dfs(int node, int parent) {
sz[node] = 1;
for(int son : g[node]) {
if(son != parent) {
dfs(son, node);
sz[node] += sz[son];
if(down[son] == 0) {
down[node]++;
down_move[node] = son;
}
}
}
}
void dfs2(int node, int parent) {
can_win[node] = down[node];
win_move[node] = down_move[node];
if(node > 1 && (can_win[parent] == 0 || (can_win[parent] == 1 && win_move[parent] == node))) {
can_win[node]++;
win_move[node] = parent;
}
if(can_win[node] > 0) {
cnt++;
}
for(int son : g[node]) {
if(son != parent) {
dfs2(son, node);
}
}
}
void dfs3(int node, int parent) {
long long sum = 0;
for(int son : g[node]) {
if(son != parent) {
dfs3(son, node);
sum += dp[son];
}
}
if(down[node] >= 2) {
dp[node] = 1LL * n * sz[node];
} else if(down[node] == 1) {
dp[node] = 1LL * n * sz[node] - dp[down_move[node]];
} else {
dp[node] = 1LL * n * sz[node] - cnt - sum;
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
long long d;
cin >> n >> d;
for(int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1, 0);
dfs2(1, 0);
dfs3(1, 0);
cout << dp[1] << "\n";
return 0;
}