Here is a general method to do the sort of thing you're after.
First you need to create a table of numbers. A good way of doing this is to create a CTE to create them on the fly, like this (from here: SQL, Auxiliary table of numbers)
--===== Itzik's CROSS JOINED CTE method
WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
E02(N) AS (SELECT 1 FROM E00 a, E00 b),
E04(N) AS (SELECT 1 FROM E02 a, E02 b),
E08(N) AS (SELECT 1 FROM E04 a, E04 b),
E16(N) AS (SELECT 1 FROM E08 a, E08 b),
E32(N) AS (SELECT 1 FROM E16 a, E16 b),
cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E32)
SELECT N
FROM cteTally
WHERE N <= 1000000; -- Whatever the maximum value might be...
Then link it to your table and look for the gaps. Since you have a very specific range in mind, the whole answer looks like this:
WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
E02(N) AS (SELECT 1 FROM E00 a, E00 b),
E04(N) AS (SELECT 1 FROM E02 a, E02 b),
E08(N) AS (SELECT 1 FROM E04 a, E04 b),
E16(N) AS (SELECT 1 FROM E08 a, E08 b),
E32(N) AS (SELECT 1 FROM E16 a, E16 b),
cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E32)
SELECT numbers.N
FROM cteTally AS numbers
LEFT OUTER JOIN TableName AS yourtable
ON numbers.N = yourtable.Id
WHERE yourtable.Id IS NULL
AND numbers.N BETWEEN 400000 AND 409684; -- Constrain to your required range