I think you want this, an anti-semijoin (also often called just "anti-join").
The "semi" because there is a join between a and b (in the subquery) but we only want and get rows from one table (b) in the result. The "anti" because we get rows from one table that do NOT have a related row in the other table.:
select b.* -- show everything
from table_b b -- from table b
where not exists -- when
( select 1 -- there is nothing
from table_a a -- in table a with
where a.road_id = b.road_id -- same road,
and a.year = b.year -- same year and
and a.from_m < b.to_m -- overlapping
and b.from_m < a.to_m -- (from, to)
) ;
Test at sqlfiddle.com.