Knockout, suíço e outros formatos de torneio

#140
Made by: ----
1024MB
0.5s

Torneios de jogos e esportes são cada vez mais frequentes, servindo como uma forma de testar as habilidades dos participantes. A escolha do formato ideal depende da modalidade e do número de participantes. Por exemplo, um formato “todos contra todos” pode ser inviável quando o número de participantes é grande, enquanto um torneio de knockout (conhecido popularmente como “mata-mata”) pode ser frustrante quando dois fortes participantes se enfrentam precocemente. Já o formato suíço é um bom intermediário e utilizado em várias modalidades. Neste formato, se há $N$ participantes no torneio, ocorrerão cerca de $\lceil \log_2 N \rceil$ rodadas, nas quais os jogadores sempre enfrentam oponentes com pontuações similares.

Um formato similar vem sendo usado em alguns jogos, como alternativa ao formato suíço: chamaremos este formato de “(A, B)-eliminação”. Neste formato, toda partida tem um vencedor e um perdedor (ou seja, não há empates) e os jogadores sempre enfrentam oponentes com a mesma pontuação que eles. Cada participante joga partidas até alcançar $A$ vitórias ou $B$ derrotas, o que ocorrer primeiro.

Este formato tem uma característica muito conveniente: o número de rodadas não depende do número de participantes. Além da escalabilidade, essa característica facilita a definição da estrutura de premiação, uma vez que é possível prever o número de participantes com cada pontuação possível.

Apesar das vantagens, este formato apresenta uma complicação: nem sempre é possível realizá-lo, pois pode não haver oponentes suficientes para completar uma rodada com as restrições estabelecidas. Por exemplo, se $A = 2$ e $B = 2$, e temos $N = 6$ participantes, após a primeira rodada teríamos 3 jogadores com 1 vitória e 0 derrotas. Então, na segunda rodada, como esse número é ímpar, não será possível parear todos os jogadores com oponentes de mesma pontuação. Por outro lado, se $N = 8$, é possível realizar o pareamento.

Sua ajuda foi solicitada para determinar, dados os valores de $A$ e $B$, qual é o menor número de jogadores tal que todas as rodadas do torneio possam ser realizadas.

Input

A entrada consiste em uma única linha contendo dois inteiros $A$ e $B$ ($1 \leq A, B \leq 10^{18}$), separados por espaço, definindo o formato do torneio conforme descrito acima.

Output

Seu programa deve escrever uma única linha contendo o menor número de jogadores possível no torneio. Como a resposta pode ser muito grande, imprima o resultado módulo $10^9 + 7$.


Input Example
Output Example
3 3
16

3 2
16