upper bounds done