#N = gets.to_i               # 単一整数
#a = gets.split.map(&:to_i)  # スペースで区切られた複数の整数
#a = N.times.map{gets.to_i}  # 縦に並んだ複数の整数。たまにある
#S = gets.chomp              # 文字列。chompを付けないと改行文字がついてくる

=begin
def solveABC177A
  D,T,S = gets.split.map(&:to_f)
  if D/S <= T 
    puts "Yes"
  else
    puts "No"
  end
end

def solveABC177B
  S = gets.chomp
  T = gets.chomp
  s_len = S.length
  t_len = T.length
  max_count = 0
  for i in 0..(s_len - t_len)
    match_count = 0
    extracted_str = S[i,t_len]
    for i2 in 0..(t_len-1)
      if extracted_str[i2] == T[i2]
        match_count += 1
      end
    end
    max_count = [match_count,max_count].max
  end
  puts t_len - max_count
end
=end

=begin
N = gets.to_i
An = gets.split.map(&:to_i)
Sn = [An[0]]
ans = 0
for i in 1..(An.length-1)
  Sn.push Sn[i-1] + An[i]
end

for i in 0..(An.length-1-1)
  ans += (An[i] * (Sn[N-1] - Sn[i])) % (10**9 + 7)
  ans %= (10**9 + 7)
end

puts ans
=end

N,M = gets.split.map(&:to_i)
$tree = []
for i in 0..(N-1)
  $tree.push []
end
Ms = []
for i in 0..(M-1)
  Ms.push gets.split.map(&:to_i).sort
  $tree[Ms[i][0]-1].push Ms[i][1]-1
end

$used_nums = [-1]*N # nil is non used

def search(start_number,next_number)
  if $used_nums[next_number] != -1
    return
  end
  $used_nums[next_number] = start_number

  for n in $tree[next_number]
    search(start_number,n)
  end
end

for i in 0..(N-1)  
  search(i,i)
end

max_count = [0]*N
for used_num in $used_nums
  max_count[used_num] += 1
end
puts max_count.max