problem

In Ikatta, the SNS used by AOR Ika-chan, posts are called tweets.

And in squid, there is a concern that visibility will deteriorate if there are many replies to tweets, so when a tweet meets any of the following rules, the tweet will be displayed on the screen. ing.

* Rule 1. No reply to any tweet
* Rule 2. No reply from any tweet
* Rule 3. When you follow the reply destinations in order from the tweet to which Rule 2 is applied, you can reach it in less than $ K $ times.



The same tweet will not be displayed more than once.

Now, when there are $ N $ tweets and $ A_i $ is $ 0 $, the $ i $ th tweet is a non-reply tweet, and when $ A_i $ is not $ 0 $, the $ i $ th tweet is the $ A_i $ th tweet. It is a tweet of the reply to the tweet of.

Answer the number of tweets displayed on the screen.



output

Output the number of tweets displayed on the screen. Also, output a line break at the end.

Example

Input

6 3
0
0
2
3
4
5


Output

5
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>	
#include<map>
#include<set>
#include<utility>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<cstdio>
#include<sstream>
#include<iomanip>
#include<assert.h>
#define loop(i,a,b) for(int i=a;i<b;i++) 
#define rep(i,a) loop(i,0,a)
#define pb push_back
#define all(in) in.begin(),in.end()
#define shosu(x) fixed<<setprecision(x)
using namespace std;
//kaewasuretyuui
typedef long long ll;
typedef int Def;
typedef pair<Def,Def> pii;
typedef vector<Def> vi;
typedef vector<vi> vvi;
typedef vector<pii> vp;
typedef vector<vp> vvp;
typedef vector<string> vs;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef pair<Def,pii> pip;
typedef vector<pip>vip;
//#define mt make_tuple
//typedef tuple<double,int,double> tp;
//typedef vector<tp> vt;
template<typename A,typename B>bool cmin(A &a,const B &b){return a>b?(a=b,true):false;}
template<typename A,typename B>bool cmax(A &a,const B &b){return a<b?(a=b,true):false;}
const double PI=acos(-1);
const double EPS=1e-7;
Def inf=sizeof(Def)==sizeof(long long)?2e18:1e9;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

int n,m;
int out;
vi in;
vvi G;
int dfs(int a){
	int t=inf;
	rep(i,G[a].size()){
		t=min(t,dfs(G[a][i]));
	}
	if(t==inf)t=0;
	t++;
	if(t<=m&&in[a])out++;
	return t;
}
int main(){
	out=0;
	cin>>n>>m;
	in=vi(n);
	rep(i,n)cin>>in[i];
	G=vvi(n);
	rep(i,n)if(in[i]){
		G[in[i]-1].pb(i);
	}
	rep(i,n)if(!in[i]){
		out++;
		dfs(i);
	}
	cout<<out<<endl;
}




/*
vi G;
vvi rG;
int out;
int n,k;
int dfs(int a){
	int t=inf;
	rep(i,rG[a].size())t=min(t,dfs(rG[a][i]));
	if(t==inf)t=0;
	t++;
	if(t<=k&&G[a])out++;
	return t;
}
int main(){
	cin>>n>>k;
	G=vi(n);
	rep(i,n)cin>>G[i];
	rG=vvi(n);
	rep(i,n)if(G[i])rG[G[i]-1].pb(i);
	out=0;
	rep(i,n)if(!G[i]){
		out++;
		dfs(i);
	}
	cout<<out<<endl;
}
*/