import sequtils,math proc getchar_unlocked():char {. importc:"getchar_unlocked",header: "" ,discardable.} proc scan(): int = while true: let k = getchar_unlocked() if k < '0': return result = 10 * result + k.ord - '0'.ord proc getIsNotPrimes(n:int) :seq[bool] = # [0...n] O(n loglog n) result = newSeq[bool](n+1) result[0] = true result[1] = true for i in countup(2,n.float.sqrt.int): if result[i]: continue for j in countup(i*2,n,i): result[j] = true let isNotPrimes = getIsNotPrimes(1000_010) let n = scan() let p = scan() if p == 1 : quit "1",0 if p >= n div 2 and not isNotPrimes[p]: quit "1",0 var ans = n div 2 - 1 for i in countup(n div 2 + 1,n): if isNotPrimes[i] : ans += 1 echo ans