A concrete example may help here.  If you type M-x au TAB,
the TAB looks for alternatives (in this case, command names) that
start with `au'.  There are several, including
auto-fill-mode and auto-save-mode---but they are all the
same as far as auto-, so the `au' in the minibuffer changes
to `auto-'.
If you type TAB again immediately, there are multiple possibilities for the very next character--it could be any of `cfilrs'---so no more characters are added; instead, TAB displays a list of all possible completions in another window.
  If you go on to type f TAB, this TAB sees
`auto-f'.  The only command name starting this way is
auto-fill-mode, so completion fills in the rest of that.  You now
have `auto-fill-mode' in the minibuffer after typing just au
TAB f TAB.  Note that TAB has this effect because in
the minibuffer it is bound to the command minibuffer-complete
when completion is available.
Go to the first, previous, next, last section, table of contents.