working on upper bounds