#include <stdio.h>

#define MAX_N 100
#define INF 1e8

int main(){
  int N,i,j,k,l,q,r[MAX_N],c[MAX_N],p[MAX_N+1];
  int dp[MAX_N+1][MAX_N+1];
  scanf("%d",&N);
  for(i = 0 ; i < N ; i++){
    scanf("%d%d",&r[i],&c[i]);
  }
  p[0] = r[0];
  for(i = 1 ; i <= N ; i++){
    p[i] = c[i-1];
  }
  N++;
  for(i = 0 ; i < N ; i++){
    dp[i][i] = 0;
  }
  for(l = 2 ; l < N ; l++){
    for(i = 1 ; i < N-l+1 ; i++){
      j = i + l - 1;
      dp[i][j] = INF;
      for(k = i ; k <= j-1 ; k++){
        q = dp[i][k] + dp[k+1][j] + p[i-1]*p[k]*p[j];
        if(q < dp[i][j]){
          dp[i][j] = q;
        }
      }
    }
  }
  printf("%d\n",dp[1][N-1]);
  return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=2e5+3,du=1e9+7;
int m,n;
signed main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>m>>n;
	map<int,int> mp;
	multiset<int> s;
	for (int i=1;i<=n;i++) mp[i]=i,s.insert(0);
	for (int i=1;i<=m;i++)
    {
        int l,r;
        cin>>l>>r;
        auto it=mp.lower_bound(l);
        int mx=0;
        while(it!=mp.end()&&it->first<=r)
        {
            mx=max(mx,it->second);
            int dis=(it->first)-(it->second);
            s.erase(s.find(dis));
            mp.erase(it++);
        }
        if (mx!=0&&r<n&&mp.find(r+1)==mp.end())
        {
            mp[r+1]=mx;
            s.insert(r+1-mx);
        }
       // cout<<"DM";
        if (s.size()) cout<<(*s.begin())+i<<"\n";
        else cout<<-1<<"\n";
    }
	return 0;
}
