def digital_root(n : Int32) : Int32 n == 0 ? 0 : 1 + (n - 1) % 9 end # Read k and n from separate lines k = gets.not_nil!.to_i n = gets.not_nil!.to_i # Sieve of Eratosthenes is_prime = Array.new(n + 1, true) primes = [] of Int32 (2..n).each do |i| if !is_prime[i] next end primes << i if k <= i j = i * 2 while j <= n is_prime[j] = false j += i end end # Process primes with sliding window que = Deque(Int32).new v = Array.new(10, false) mlen = 0 ans = 0 primes.each do |p| t = digital_root(p) while v[t] front = que.shift v[digital_root(front)] = false end que.push(p) v[t] = true if mlen <= que.size mlen = que.size ans = que.first end end puts ans