/*
TASK: round
LANG: C
*/

#include <stdio.h>
#define MAX (1 << 11)
#define INF (1 << 30)

int min (int a, int b)  {
  return a < b ? a : b;
}

int o[2002][2048], n, ans;
int d1[MAX], d2[MAX];

void init ()  {
  int i, j;

//freopen ("round.in" , "r", stdin );
//freopen ("round.out", "w", stdout);

  scanf ("%d", &n);

  for (i = 1; i <= n; ++i)
    scanf ("%d", &d1[i]);

  for (i = 1; i <= n; ++i)
    scanf ("%d", &d2[i]);

  for (i = 0; i <= n; ++i)
    for (j = 0; j <= n; ++j)
      o[i][j] = INF;

  o[0][0] = 0;
}

void upd (int x, int y)  {
  int i, t, r1, r2;

  if (x < n)  {

    r1 = r2 = 0;
    for (i = 1; i <= x; ++i)
      if (d1[i] < d1[x + 1])
        ++r1;
      else
        ++r2;

    for (i = 1; i <= y; ++i)
      if (d2[i] < d1[x + 1])
        ++r1;
      else
        ++r2;

    if (o[x + 1][y] > (t = min (r1, r2)) + o[x][y])
      o[x + 1][y] = t + o[x][y];
  }

  if (y < n)  {

    r1 = r2 = 0;
    for (i = 1; i <= x; ++i)
      if (d2[y + 1] <= n)  {
        if (d2[y + 1] < d1[i] && d1[i] <= n)
          ++r1;
        else
          ++r2;
      }
      else  {
        if (n + 1 <= d1[i] && d1[i] < d2[y + 1])
          ++r1;
        else
          ++r2;
      }

    for (i = 1; i <= y; ++i)
      if (d2[y + 1] <= n)  {
        if (d2[y + 1] < d2[i] && d2[i] <= n)
          ++r1;
        else
          ++r2;
      }
      else  {
        if (n + 1 <= d2[i] && d2[i] < d2[y + 1])
          ++r1;
        else
          ++r2;
      }

    if (o[x][y + 1] > (t = min (r1, r2)) + o[x][y])
      o[x][y + 1] = t + o[x][y];
  }
}

void think ()  {
  int i, j;

  for (i = 0; i <= n; ++i)
    for (j = 0; j <= n; ++j)
      upd (i, j);

  ans = o[n][n];
}

void print ()  {
  printf ("%d\n", ans);
}

int main ()  {
  init ();
  think ();
  print ();

  return 0;
}

