Haskell, 4343 41 bytes
l=['A'..'Z']
m=mapM(putStrLn.(`map`l<$>l).max)l
This defines a function that needs no imports and can just be run in a complete program by adding
main=m
Of course, we could also just name it main
itself, but that is three more bytes.
Saved 2 bytes thanks to @wchargin. Depending on the interpretation of the task, we can save 2 more by deleting m=
and saying that the remaining part is the function that you can put into main=...