As everybody else has said, B.Method2 gets called. Here is a few other pieces of information so you understand what's going on:
((A)B).Method2();
B.Method2();
These will both call B.Method1() because it was properly overridden. In order to call A's Method1, there must be a base.Method1() call made from B (which is often but not always done in B.Method1's implementation).
If, however, B was defined in this way:
class B:A {
new public void Method1() { }
... then A's Method1() would be called because Method1 was not actually overridden, it was hidden and tucked away outside the rules of polymorphism. In general, this is typically a bad thing to do. Not always, but make sure you know very well what you're doing and why you're doing it if you ever do something like this.
On the flip side, using new in this way makes for some interesting interview questions as well.