#include"bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<ll,ll>PLL;
const ll maxn=1e6+10,mod=1e9+7,inf=0x3f3f3f3f;
ll n,k,flg[maxn],u,v,deep[maxn],tickAns,timeAns,cut[maxn];
vector<ll>edge[maxn];
void fDeep(ll x){
for(int i=0;i<edge[x].size();i++){
ll v=edge[x][i];
deep[v]=deep[x]+1;
tickAns=max(tickAns,deep[v]);
fDeep(v);
}
}void fCut(ll x){
if(edge[x].size()==0){
cut[x]=tickAns-deep[x];
return ;
}
for(int i=0;i<edge[x].size();i++){
ll v=edge[x][i];
fCut(v);
cut[x]=min(cut[v],cut[x]);
}for(int i=0;i<edge[x].size();i++){
ll v=edge[x][i];
if(cut[v]!=cut[x])timeAns++;
}
}
void fTime(ll x){
if(edge[x].size()==0)return ;
timeAns+=(k-edge[x].size());
for(int i=0;i<edge[x].size();i++){
ll v=edge[x][i];
fTime(v);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
memset(cut,0x3f,sizeof cut);
cin>>n>>k;
for(int i=1;i<n;i++){
cin>>u>>v;
edge[u].push_back(v);
}fDeep(1);
fCut(1);
fTime(1);
cout<<tickAns<<' '<<timeAns<<endl;
return 0;
}