#include <iostream>
#include <vector>
using namespace std;
const int N = 10000;
int M[N];
int judge(int n)
{
int count = 1;
while(n!=1)
{
if(n%2==0)
n /= 2;
else
n = 3*n+1;
count++;
}
return count;
}
int mmax(int a, int b)
{
int c = -1;
if(a>b)
{
c = a;
a = b;
b = c;
}
c = -1;
for(int i=a;i<=b;i++)
{
if(c<M[i])
c = M[i];
}
return c;
}
int main()
{
for(int i=1;i<N;i++)
M[i] = judge(i);
int a,b;
vector<int> ivec;
while(cin>>a>>b)
ivec.push_back(mmax(a,b));
vector<int>::const_iterator iter = ivec.begin();
while(iter != ivec.end())
cout<<*iter++<<endl;
return 0;
}
----------------
#include <iostream>
#include <vector>
using namespace std;
const int N = 10000;
int M[N];
void init()
{
M[0]=0;
M[1]=1;
for(int i=2;i<N;i++)
{
int c=1;
int n=i;
while(true)
{
if(n<i)
{
c--;
c+=M[n];
M[i]=c;
break;
}
else
{
if(n%2==0)
n=n/2;
else
n=3*n+1;
c++;
}
}
}
}
int mmax(int a, int b)
{
int c = -1;
if(a>b)
{
c = a;
a = b;
b = c;
}
c = -1;
for(int i=a;i<=b;i++)
{
if(c<M[i])
c = M[i];
}
return c;
}
int main()
{
init();
int a,b;
vector<int> ivec;
while(cin>>a>>b)
ivec.push_back(mmax(a,b));
vector<int>::const_iterator iter = ivec.begin();
while(iter != ivec.end())
cout<<*iter++<<endl;
return 0;
}