Trains in eastern Europe are very cheap, even with a sleeper. Budapest-St. Petersburg (only once or twice a week) or Moscow (at least one train a day) takes 2 nights, and St. Petersburg or Moscow-Riga (daily, one train a day each) is an overnight trip.