#include <iostream>
#include <vector>
using namespace std;
struct muc{
	int start;
	int nod;
	int cost;
};
vector <muc> gr[250005];
int s[100005],viz[100005],sum[100005];
muc aux;
int n,m;
void dfs1(int x)
{
	int i,j;
	viz[x]=1;
	for(i=0;i<gr[x].size();i++)
	{
		if(sum[gr[x][i].nod]>sum[x]+gr[x][i].cost)
			{
				sum[gr[x][i].nod]=sum[x]+gr[x][i].cost;
				dfs1(gr[x][i].nod);
		}
	}
	viz[x]=0;
}
void dfs2(int x)
{
	int i;
	s[x]=1;
	for(i=0;i<gr[x].size();i++)
	{
		if(s[gr[x][i].start]!=1)
			dfs2(gr[x][i].start);
		
	}
}
int main()
{
	int i,j,x,y,z;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		sum[i]=1000000000;
		cin>>x>>y>>z;
		aux.nod=y;
		aux.cost=z;
		aux.start=x;
		gr[x].push_back(aux);
	}
	for(i=1;i<=n;i++)
	{ 
		
		dfs1(i);
		viz[i]=1;
	}
	for(i=1;i<=n;i++)
		if(sum[i]<0);
			{
				
				dfs2(i);
				s[i]=1;
		}
	int k=0;
	for(i=1;i<=n;i++)
		if (s[i]==1)
			k++;
	cout<<k;
}