Reproduces on master.

```
SELECT toDateTime64('2021-03-22', 3, 'Asia/Tehran')

Query id: 26f7c373-f473-4209-8976-6ada79a8627f

┌─toDateTime64('2021-03-22', 3, 'Asia/Tehran')─┐
│                      2157-04-28 06:28:16.000 │
└──────────────────────────────────────────────┘
```
{
        const LUTIndex index = findIndex(t);
        const Values & values = lut[index];
        Time time = t - values.date;
        if (time >= values.time_at_offset_change())
            time += values.amount_of_offset_change();
        const LUTIndex new_index = index + delta;
        if (time >= lut[new_index].time_at_offset_change())
            time -= lut[new_index].amount_of_offset_change();
        return lut[new_index].date + time;
    }
    inline NO_SANITIZE_UNDEFINED Time addWeeks(Time t, Int32 delta) const
    {
        return addDays(t, static_cast<Int64>(delta) * 7);
    }
    inline UInt8 saturateDayOfMonth(Int16 year, UInt8 month, UInt8 day_of_month) const
    {
        if (likely(day_of_month <= 28))
            return day_of_month;
        UInt8 days_in_month = daysInMonth(year, month);
        if (day_of_month > days_in_month)
            day_of_month = days_in_month;
        return day_of_month;
    }
    template <typename DateOrTime>
    inline LUTIndex NO_SANITIZE_UNDEFINED addMonthsIndex(DateOrTime v, Int64 delta) const