OK, first, some terminology:
- A (regular, ordinary, local) branch is something like - master.
 
- A "remote branch" like - origin/masteris something stored in your local repository, to remember where, on the remote, the remote had its own (local) branch pointing.
 - A "remote branch" gets updated when you contact the remote (typically on fetch and push).  At that time, your local git finds out what branches they have, and updates these. 
- A "tracking branch" is a local branch that records two items: a "remote", typically a name like - origin, and another "merge" name.  For instance, if your local branch- masteris a tracking branch, it may be configured with- branch.master.remote = originand- branch.master.merge = master.  Annoyingly, you can't always just string these together (you have to map through- remote.origin.fetchto be completely correct with this) but in general this means that your local- masteris "tracking"- origin/master".
 
You can't1 create a "remote branch" locally.  You have to fetch or push to/from the remote.  If that remote has a local branch named X, your git then records the remote's idea of that branch, using the origin/X style name.
So, what's going on here?  Well, you did this:
$ git checkout -b m1-master m1/master
That creates a local branch named m1-master.  (This local branch is also a tracking branch, but that's only partly relevant here, because of the push.default setting below.)
Then, you did this:
$ git push
(with no remote name and no refspecs after push).  Git uses the default remote, which turns out to be m1 because of the tracking.  Next though, git uses a default refspec, based on push.default and/or other git config items.
As of git 1.8.4.2 the "default push.default" is matching.  This would not create a new branch (but also won't push anything unless there's an m1-master there).  You have it set to current, which means: "please update or create, on the remote, the current branch, using its current name."  The current branch is m1-master, so that was created.
Change push.default to upstream to fix this:
git config push.default upstream
(Also, see "Warning: push.default is unset; its implicit value is changing in Git 2.0" for various other options.)
1Well, you can do it with git update-ref or manual poking about in your .git directory. :-) Just, not with "normal" user commands.