//取了换根dp的第一次遍历,求出了每个节点的子树大小
//x的子树大小:以x为根节结点的所有子孙结点的个数之和,包括本身
//此处说明不包括本身,但是是排序,每个结点都没有包括不影响
#include <bits/stdc++.h>
using ll=long long;
using namespace std;
const int N=1e5+9;
vector<int> e[N];//邻接表
ll dp[N],sz[N],n,m;
void dfs1(int x,int fa)
{
sz[x]=1;//初始化计算结点
for(const auto &y : e[x])
{
if(y==fa) continue;
sz[y]=sz[x]+1;
dfs1(y,x);
sz[x]+=sz[y];
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<n;i++)
{
ll u,v;cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs1(1,0);
int ans=1;//小明的地位
//没有人的是他就是第一位,有一个人他要么第1要么第2
//有n个人最小为第n+1位;
for(int i=1;i<=n;i++)
{
if(sz[i]>sz[m]||sz[i]==sz[m]&&i<m)ans++;
//手下的帮众相同且较小的在前面
//手下越小的越往后排
//将小明的手下与所有人的手下进行排序,如果有人手下数量大于他则往后排一位
}
cout<<ans;
return 0;
}