The rupee weakened 20 paise to a three-week low of 95.39 against the dollar on Monday. Higher dollar demand, fresh arbitrage activity between onshore and offshore markets, and a stronger dollar index put pressure on the Indian currency.