program dalikliai;
  { 3 u‘davinys, antras sprendimas }
{----------------------------------------------------------}
  const MAX   = 2000;
  type  dal = array [1..MAX] of integer;

  function daug (m, n : integer) : integer;
    { randamas ma‘iausias intervalo [m, n] skai‡ius, }
    { turintis daugiausia dalikli—; m, n - nat–ralieji }
    var kiek     : dal; { kiek skai‡ius }
                        { turi dalikli— }
        max_dal,        { maksimalus dalikli— skai‡ius }
        k,              { skai‡i— 2, 3, 4, ... kartotiniai }
        sk, rez   : integer;
  begin
    kiek[1] := 1;
    for sk := 2 to n do { visi skai‡iai dalijasi iž }
        kiek[sk] := 2;  { vieneto ir savŠs }
    for sk := 2 to n div 2 do
        begin
          k := sk + sk;
          while k <= n do
            begin
              kiek[k] := kiek[k] + 1;
              k := k + sk
            end
        end; { dalikliai surasti: masyvas kiek u‘pildytas }
   { randamas dalikli— maksimumas }
   max_dal := kiek[m];
   rez := m;
   for sk := m + 1 to n do
       if kiek[sk] > max_dal
          then begin
                 max_dal := kiek[sk];
                 rez := sk
               end;
   daug := rez
  end;
{----------------------------------------------------------}
  var m, n : integer;
begin
  write ('­veskite skai‡ius m ir n : ');
  readln (m, n);
  writeln (daug (m, n))
end.
