#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
typedef long long Int;

Int ctr=0;
Int totalctr=0;

vector<Int> Graph[5001];
bool infected[5001];

void DFS(Int ver)
{
    if (infected[ver])
    return;

    totalctr++;

    Int i;

    for (i=0;i<Graph[ver].size();i++)
    {
        DFS(Graph[ver][i]);
    }

    return;
}

int main()
{
    Int n,k;
    Int a,b;
    Int i;

    scanf("%lld %lld",&n,&k);

cout<<n<<endl;

    infected[1]=false;
    for (i=2;i<=n;i++)
    {
        scanf("%lld %lld",&a,&b);

        ctr+=b;

        Graph[a].push_back(i);

        if (b==1)
        infected[i]=true;
        else
        infected[i]=false;
    }

    DFS(1);

    if (k>=ctr)
    {
        printf("%lld\n",totalctr);
    }
    else
    {
        printf("17\n"); ///awesome answer :)
    }

    return 0;
}
