I would answer:
Nothing, absolutely nothing, replaces the need for good communication between programmers on a programming team, and management.
This means a certain level of breaking down the task into simple "what we need to do" statements for managers and explaining any roadblocks.
I worked on a small project where the entire class structure of the program was designed by someone in UML prior to any code being written. Great, but the designers didn't anticipate the way the classes might be used, or the need to change certain structures to better fit program logic. They simply threw out a design they thought would work.
I'm yet to meet someone who can design a program in their head and produce exactly that when writing it beyond very simple stuff. The process is quite organic and things do need to change along the way as programmers realise their earlier errors and correct them. I can see why feature creep starts to occur and this is where management need to understand what is going on, be kept in the loop and updated. Good managers will listen to what their programmers are telling them and adjust sights accordingly.
So, of your two options I'd go for the high level design document: we want the software to do this, run on this platform, accept this sort of input and spit this sort of thing out. That works, if the above is kept to.
UML, as far as I'm concerned, isn't worth it.