upper bound should not be included in range