#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <queue>
using namespace std;
inline int gi(){
char tmp=getchar();int ans=0;
while(!isdigit(tmp)) tmp=getchar();
while(isdigit(tmp)){
ans = ans * 10 + tmp - '0';
tmp = getchar();
}
return ans;
}
const int N = 2002000;
struct Edg{
int v,nxt;
}Edge[N<<1];int Head[N];
inline void Add(int u,int v){
static int cnt = 0;
Edge[++cnt].v=v;Edge[cnt].nxt=Head[u];Head[u]=cnt;
}
inline int lowbit(int x){return x&-x;}
int F[N],D[N],Vis[N],C[N],Size[N],Id[N];
int n;
inline void Mark(int pos,int v){
while(pos <= n){
C[pos] += v;
pos += lowbit(pos);
}
}
inline int Sum(int pos){
int ans = 0 ;
while(pos){
ans += C[pos];
pos -= lowbit(pos);
}
return ans;
}
int tot = 0;
void Dfs(int pos,int fa){
Size[pos] = 1;
Id[pos] = ++tot;
D[pos] = D[fa]+1;
for(int i=Head[pos];i;i=Edge[i].nxt){
int arr = Edge[i].v;
if(arr == fa) continue;
F[arr] += pos;
Dfs(arr,pos);
Size[pos] += Size[arr];
}
return ;
}
signed main()
{
#ifdef TSUKIAKIOI
freopen("data.in","r",stdin);
#endif
int m;n=gi(),m=gi();
for(int i=1;i<n;++i){
int a,b;
a=gi(),b=gi();
Add(a,b);Add(b,a);
}
int remain = n - m;
Vis[0] = 1;
Dfs(n,0);
for(int i=n;i>=1;--i){
if(Vis[i]) continue;
int x = Sum(Id[i]);
// 当前节点到联通块上有几个节点
if(D[i] - x <= remain){
remain -= (D[i]-x);
//printf("Succussfully Add %d, extra nodes:%d\n",i,D[i]-x);
int pos = i;
int ed=0;
while(!Vis[pos]){
Vis[pos] = 1;
pos = F[pos];
if(pos)
ed = pos;
}
pos = i;
while(pos != ed){
Mark(Id[pos],1);
Mark(Id[pos]+Size[pos],-1);
pos = F[pos];
}
}
}
for(int i=1;i<=n;++i)
if(!Vis[i])
printf("%d ",i);
return 0;
}