sub gcd { my ($n, $m) = @_; ($n, $m) = ($m, $n % $m) while $m; return $n; }