an important question to ask is 'should I be catching exceptions here at all?' if you are dealing with an external resource like the disk then the answer is probably yes and otherwise its probably no - your code is better if it crashes when it has a bug in!
Following the above it's generally best to keep your try-catches as small as possible so you dont accidentally hide any bugs in your code. I think in your example that puts it in m1.
This way you also dont have to write try-catches in all client code for a method that gets used more than once. Following this logic you typically end up with a result object (or possibly more simply return null if appropriate) which can be queried to see if there is an error. Better yet you could have this result object throw its own exception if there was an error but someone is trying to read the results of the failed operation (if appropriate). In this way you can use exceptions to avoid programming errors... as long as you dont catch exceptions as a way of controlling the flow of a program.
Im sure there are plenty of other opinions on the topic though